Sonderzeichen in fpPDF

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
sierdolg
Beiträge: 66
Registriert: Mi 24. Okt 2012, 15:50

Sonderzeichen in fpPDF

Beitrag von sierdolg »

Hallo beisammen,

wenn man mit fppdf ein PDF erzeugt und darin via WriteText() Umlaute ausgeben will, so funktioniert dies wie erwartet, sofern man den String mit UTF8-Decode() umwandelt; aText soll ja laut Hint ein UTF8String sein. Als ich dann eine Checkbox ☑ einfügen wollte, wunderte ich mich, als dieses in der Ausgabe dennoch fehlte.

Kopiert man die entsprechenden Leerstellen im PDF. findet man beispielsweise an Stelle besagter Checkbox (BALLOT BOX WITH CHECK, UTF-8: 0xE2 0x98 0x91) die Zeichenfolge "EF BF BF EF DF BD"...

Ein eingedampftes und nochmals getestetes Minimalbeispiel liegt bei.

Was mache ich falsch?

Kontext: Lazarus 1.9.0 r57454M FPC 3.1.1 x86_64-linux-qt

[Update 2018-03-13: auch heute läßt sich das 91k Archiov nicht anhängen - "Das Kontingent für Dateianhänge ist bereits vollständig ausgenutzt."
Ersatzweise hier der relevante Schnipsel:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  myPDF: TPDFDocument;
  S: TPDFSection;
  P: TPDFPage;
  F: TFileStream;
  FtTextRegular : Integer;
begin
  myPDF := TPDFDocument.Create(Nil);
  with myPDF.Infos do
    begin
      Title := Application.Title;
      ApplicationName := ApplicationName;
      CreationDate := Now()
    end;
  myPDF.Options := [poPageOriginAtTop];
  myPDF.StartDocument;
  S := myPDF.Sections.AddSection;
  P := myPDF.Pages.AddPage;
  P.PaperType := ptA4;
  P.UnitOfMeasure := uomMillimeters;
  S.AddPage(P);
  FtTextRegular := myPDF.AddFont('Andada-Regular.ttf', 'Andada-Regular');
 
  P.SetFont(FtTextRegular, 12);
  P.SetColor(clBlack, false);
  P.WriteText(50, 50, 'ANSI-Text macht keine Probleme');
  P.WriteText(50, 60, 'bis auf Umlaute, wenn man UTF8Decode() für die Umwandlung vergißt');
  P.WriteText(50, 70, UTF8Decode('doch mit UTF8Decode() wären die Grüße schon wieder freundlich statt böse'));
  P.WriteText(50, 90, UTF8Decode('Aber wo bleiben die Symbole? $$$ Am Font liegt es nicht!'));
 
  F := TFileStream.Create('Minimaltest.pdf',fmCreate);
  try
    myPDF.SaveToStream(F);
  finally
    F.Free;
  end;
 
end;             


]

OK, also auch der Text läßt sich nicht hochladen (Incorrect string value: '\xF0\x9F\x98\xAE A...' for column 'post_text' at row 1 [1366]).
Ersatzweise habe ich an Stelle von "UTF-8: 0xE2 0x98 0x91" in Zeile 30 des Codeschnipsels durch $$$ ersetzt.

Die Frage ist: Wie bekommt man solche Multibyte-Zeichenfolge-Sonderzeichen mit fpPDF in sein Ausgabedokument?

Antworten