[ 
https://issues.apache.org/jira/browse/PDFBOX-3884?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16105840#comment-16105840
 ] 

Matías Giovannini edited comment on PDFBOX-3884 at 7/28/17 11:12 PM:
---------------------------------------------------------------------

This problem occurs in seven instances in total. In every case, the 
corresponding {{Encoding}} classes list the _latter_ name in the Glyph List, 
but the {{GlyphList}} class retains the former, leading to round-trip encoding 
exceptions. As a workaround, I patch the {{Encoding}} instances using 
reflection:


{code:java}
final Method method = Encoding.class.getDeclaredMethod("overwrite", int.class, 
String.class);
method.setAccessible(true);
method.invoke(WinAnsiEncoding.INSTANCE, 0230, "ilde"); // tilde
method.invoke(WinAnsiEncoding.INSTANCE, 0267, "middot"); // periodcentered
method.invoke(SymbolEncoding.INSTANCE, 0042, "forall"); // universal
method.invoke(SymbolEncoding.INSTANCE, 0100, "approximatelyequal"); // congruent
method.invoke(SymbolEncoding.INSTANCE, 0127, "Ohm"); // Omega
method.invoke(SymbolEncoding.INSTANCE, 0363, "integraltop"); // integraltp
method.invoke(SymbolEncoding.INSTANCE, 0365, "integralbottom"); // integralbt
{code}



was (Author: mgiovann):
This problem occurs in seven instances in total. In every case, the 
corresponding {{Encoding}} classes list the _latter_ name in the Glyph List, 
but the {{GlyphList}} class retains the former, leading to round-trip encoding 
exceptions. As a workaround, I patch the {{Encoding}} instances using 
reflection:

{{
final Method method = Encoding.class.getDeclaredMethod("overwrite", int.class, 
String.class);
method.setAccessible(true);
method.invoke(WinAnsiEncoding.INSTANCE, 0230, "ilde"); // tilde
method.invoke(WinAnsiEncoding.INSTANCE, 0267, "middot"); // periodcentered
method.invoke(SymbolEncoding.INSTANCE, 0042, "forall"); // universal
method.invoke(SymbolEncoding.INSTANCE, 0100, "approximatelyequal"); // congruent
method.invoke(SymbolEncoding.INSTANCE, 0127, "Ohm"); // Omega
method.invoke(SymbolEncoding.INSTANCE, 0363, "integraltop"); // integraltp
method.invoke(SymbolEncoding.INSTANCE, 0365, "integralbottom"); // integralbt
}}

> GlyphList registers "wrong" Adobe name for "U+02DC SMALL TILDE"
> ---------------------------------------------------------------
>
>                 Key: PDFBOX-3884
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-3884
>             Project: PDFBox
>          Issue Type: Bug
>          Components: PDModel
>    Affects Versions: 2.0.6
>            Reporter: Matías Giovannini
>            Priority: Minor
>         Attachments: PDFEncodingError.java
>
>
> The Adobe Glyph List contains both "ilde;02DC" (line 2304) and "tilde;02DC" 
> (line 3826), so the Unicode conversion of ExtendedRoman 0x98 (152) "small 
> tilde" fails:
> java.lang.IllegalArgumentException: U+02DC ('ilde') is not available in this 
> font Times-Roman encoding: WinAnsiEncoding
>       at 
> org.apache.pdfbox.pdmodel.font.PDType1Font.encode(PDType1Font.java:425)
>       at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:323)
>       at 
> org.apache.pdfbox.pdmodel.PDPageContentStream.showText(PDPageContentStream.java:414)
>       at pdftest.PDFEncodingError.main(PDFEncodingError.java:18)



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to