[Lazarus] fpPDF UTF8 encoded PDFString
Michael W. Vogel
m-w-vogel at gmx.de
Thu Apr 21 08:29:14 CEST 2016
Hi,
if I understand the documentation
(https://partners.adobe.com/public/developer/en/pdf/PDFReference13.pdf)
right, it should be possible to contain in the Latin Character Set in a
PDF, also with fpPDF (which uses WinAnsiEncoding) and also with standard
fonts.
These characters are shown in table D.1 Latin Character Set and
Encodings on page 551 of the documentation.
If I now try to insert such characters, they aren't shown right in the
created PDF (Adobe Reader XI, 64bit Windows 7, 32bit Lazarus 1.7 r52225
FPC 3.1.1 r33528 i386-win32-win32/win64).
Simple try these steps to understand, what I mean:
- open Example "testfppdf" and add Run Parameters "-p 1" to only create
the first page.
- add in the Source Editor in "testfppdf.lpr" line 139 some of the Latin
Characters:
P.WriteText(25, 20, 'Sample Text AÆÁÂÄÀÅÃBCÇDEÉÊËÈЀ');
- run your app and see the result (Adobe Reader XI, 64bit Windows 7):
Sample Text A???????BC?DE?????
If I convert the string to a UTF8-encoded one, the result is:
Sample Text AÆÁÂÄÀÅÃBCÇDEÉÊËÈЀ
(I also eliminated FtText1 := D.AddFont('FreeSans.ttf', 'FreeSans',
clGreen); and the lines after line 139 to reduce the size of the
attached PDFs, the result is the same)
I add the two PDFs (one with ACP encoding, one with UTF-8 encoding) to
show you the results. I also add "UTF8_Encoded_PDFString.patch" to show
you, what I have done.
I'm not sure, if this workaround is valid or there is a better solution.
Please have a look at it.
Thank you
Kind regards
Michl
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test_ACP.pdf
Type: application/pdf
Size: 1383 bytes
Desc: not available
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20160421/1fdeb029/attachment-0004.pdf>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test_UTF8.pdf
Type: application/pdf
Size: 1384 bytes
Desc: not available
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20160421/1fdeb029/attachment-0005.pdf>
-------------- next part --------------
Index: packages/fcl-pdf/src/fppdf.pp
===================================================================
--- packages/fcl-pdf/src/fppdf.pp (revision 33528)
+++ packages/fcl-pdf/src/fppdf.pp (working copy)
@@ -2380,6 +2380,7 @@
FValue := AValue;
if (Pos('(', FValue) > 0) or (Pos(')', FValue) > 0) or (Pos('\', FValue) > 0) then
FValue := InsertEscape(FValue);
+ SetCodePage(RawByteString(FValue), CP_UTF8, True);
end;
{ TPDFUTF8String }
More information about the Lazarus
mailing list