Philip Helger created PDFBOX-3150:
-------------------------------------

             Summary: IllegalArgumentException in getStringWidth/showText
                 Key: PDFBOX-3150
                 URL: https://issues.apache.org/jira/browse/PDFBOX-3150
             Project: PDFBox
          Issue Type: Bug
          Components: PDModel
    Affects Versions: 2.0.0
         Environment: 2.0.0-RC2
            Reporter: Philip Helger


I want to get the string width using a Type0 font. Because I'm using a 
character not in the font (e.g. '\n') I'm getting the following exception:
{code}
Exception in thread "main" java.lang.IllegalArgumentException: No glyph for 
U+000A in font OpenSans
        at 
org.apache.pdfbox.pdmodel.font.PDCIDFontType2.encode(PDCIDFontType2.java:401)
        at 
org.apache.pdfbox.pdmodel.font.PDType0Font.encode(PDType0Font.java:351)
        at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:283)
        at org.apache.pdfbox.pdmodel.font.PDFont.getStringWidth(PDFont.java:312)
{code}

As this is a quite common scenario, I suggest you provide a possibility to 
provide a fallback codepoint that can be used for all non-printable characters.

A similiar exception happens when trying to print the text via the 
PDPageContentStream:
{code}
Exception in thread "main" java.lang.IllegalArgumentException: No glyph for 
U+000A in font OpenSans
        at 
org.apache.pdfbox.pdmodel.font.PDCIDFontType2.encode(PDCIDFontType2.java:401)
        at 
org.apache.pdfbox.pdmodel.font.PDType0Font.encode(PDType0Font.java:351)
        at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:283)
        at 
org.apache.pdfbox.pdmodel.PDPageContentStream.showText(PDPageContentStream.java:341)
{code}

I finally ended up creating my own "font.encode" method (with a lot of other 
hacks) that basically does the following:
{code}
   final byte [] aFallbackBytes = aFont.encode (nFallbackCodepoint);
       byte [] aCPBytes;
      try
      {
        // This method is package private
        aCPBytes = aFont.encode (nCP);
      }
      catch (final IllegalArgumentException ex) {
        aCPBytes = aFallbackBytes;
      }
{code}

-> another issue is, that "PDFont.encode (int)" is not public - it would help 
to change this as well. Shall I create a separate issue?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to