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?