Hi,

Please share that PDF (upload it somewhere).

Tilman

Am 13.11.2021 um 18:28 schrieb Maison Mo:
  Hello,
Thank you for advice ! Indeed it works in example.The difference is that the 
Helvetiva font is created with WinAnsiEncoding, and that encoding contains 
'eacute'.
See PDType1Font constructor L136 : encoding = WinAnsiEncoding.INSTANCE;

If we modify this line and use instead readEncodingFromFont(), it fails as described in my 
initial message(in annotation : /V <41E942>  but in appearance stream : 
<41FF42> Tj )
In my use case I can't modify pdf : only fill fields, and fail gracefully if 
this is not possible.Unfortunately for now it fails silently.

M.


     Le samedi 13 novembre 2021 à 13:50:48 UTC+1, Tilman Hausherr 
<thaush...@t-online.de> a écrit :
Hi,

The build has an example CreateSimpleForm.java and I changed that one to
include "AéB" and it was displayed. Please try with that example and
find out how your own code differs.

Tilman


Am 13.11.2021 um 09:46 schrieb Maison Mo:
Hello,
I encounter a strange problem when filling an acroform text field : some chars 
are missingin generated appearance.

The field uses the Helvetica standard font, without any defined encoding :7 0 
obj
<< /BaseFont /Helvetica /Name /Helv /Subtype /Type1 /Type /Font >>
The field is filled by calling method PDTextField.setValue("AéB")
After PDDocument is saved (without flattening) I see that the value is correct 
in field value :
<< /AP << /N 15 0 R >> /DA (/Helv 10 Tf 0 g)  /T (lieu_signature) /Type /Annot /V 
<41e942> ... >>
but incorrect in field appearance :15 0 obj
<< /Resources << /Font << /Helv 7 0 R >> >> /Subtype /Form /Type /XObject /Length 108 
... >>
stream
/Tx BMC
[...]
BT
/Helv 10 Tf
/DeviceGray cs
0 sc
2 3.5383 Td
<41FF42> Tj  <--- E9 has been replaced by FF ?!
ET

Tried to debug this using pdfbox-2.0.24 :

In debugger I see that a PDType1Font is created this way :
else if (encodingBase == null)
{
       this.encoding = readEncodingFromFont();
and as it is a std14 font, I get here (PDType1Font L509) :
// read from AFM
return new Type1Encoding(getStandard14AFM());
So this font is : Helvetica with encoding: built-in (Type 1)
I guess that for this standard font, builtin encoding actually is 
"StandardEncoding" as defined in annex D of PDF32000 ?

   From here, when generating the appearance stream, we pass in method :  
byte[] PDType1Font encode(int unicode)which has a special path for std14 fonts 
:if (isStandard14())
{
       // genericFont not needed, thus simplified code
       // this is important on systems with no installed fonts
       if (!encoding.contains(name))
Here we have name="eacute" and indeed encoding contains the eacute glyph name 
in 'inverted' map
(inverted map contains 315 glyphs, whereas the codeToName map only has 150 ; because many 
glyphs are mapped to code -1 in AFM file)However int code = inverted.get(name) = 
inverted.get("eacute") return -1.Hence the FF in appearance stream.
Ok, eacute is not present in font encoding, but I would rather expect an 
exceptionlike the ones thrown in other paths :    U+%04X ('%s') is not 
available in this font %s encoding: %s

BTW, do you consider a good practice to not define any font encoding when 
defining a font ?

Thank you in advance for your help.
     M.





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org

Reply via email to