Uploaded image for project: 'PDFBox'
  1. PDFBox
  2. PDFBOX-1790

NPE during PDTrueTypeFont.loadTTF() on Mac TrueType font lacking Windows-platformID CMAPEncodingEntry

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 1.8.2
    • Fix Version/s: 2.0.0
    • Component/s: Writing
    • Labels:
      None
    • Environment:
      Mac 10.7 / Java 6

      Description

      I'm attempting to embed a TrueType font using PDFBox, on the Mac, using PDTrueType.loadTTF( PDDocument, InputStream, Encoding ).

      For TrueType fonts originating from Windows (e.g., Tahoma) this works.

      For TrueType fonts originating from the Mac (e.g., Apple Chancery), a NullPointerException is thrown.

      java.lang.NullPointerException
      at org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.loadDescriptorDictionary(PDTrueTypeFont.java:409)
      at org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.loadTTF(PDTrueTypeFont.java:201)
      at org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.loadTTF(PDTrueTypeFont.java:177)

      I stepped through the code in a debugger. The method PDTrueTypeFont.loadDescriptorDictionary() loops through the cmap table for the font, looking for a cmap with platform ID 3 (Windows), and sets the variable unimap only if one is found. After that loop, the variable unimap is dereferenced without checking for null.

      Some Mac TrueType fonts have platform IDs 0 (Unicode) and 1 (Mac), but not 3 (Windows).

      At the least, a null check seems required. But more desirable would be support for Mac TrueType fonts.

      Am I missing something, or should I enter a bug?

      Example problem font:

      • Apple Chancery (Included with OS)

      Details:

      • PDFBox version: 1.8.2 [Have not yet tested with 1.8.3, which was released a few days ago]
      • Platform: Mac
      • Java 6
      • Font platform IDs: 0, 1

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                jahewson John Hewson
                Reporter:
                athomas Andrew Thomas
              • Votes:
                1 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: