Hello, I have a little problem with pdf file generation using PDFBox 2.0.3 and I can't find ways to solve it ...
I have a string which is generated by using random unicode symbols (Symbol 'U+22F2' is presented in the string for example.) and take the following exception when make some actions with this string: Caused by: java.lang.IllegalArgumentException: No glyph for U+22F2 in font ArialUnicodeMS 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:316) at org.apache.pdfbox.pdmodel.PDPageContentStream.showText(PDPageContentStream.java:414) It's happened when I try to embed "Arial Unicode MS" font. I tried to find this "wrong" symbols by using org.apache.pdfbox.pdmodel.font.PDType0Font#hasGlyph but I saw that this symbol has glyph (It's allowed in Identity-H encoding which is used for embedded fonts). I see that a lot of methods use PDCIDFontType2.encode and it has strange behavior ... It has the following block which throw exception if cid has 0 value if (cid == 0) { throw new IllegalArgumentException( String.format("No glyph for U+%04X in font %s", unicode, getName())); } I read in https://www.microsoft.com/typography/otspec/cmap.htm that "Character codes that do not correspond to any glyph in the font should be mapped to glyph index 0. The glyph at this location must be a special glyph representing a missing character, commonly known as .notdef." When I deleted this block everything work fine and I saw special glyphs in generated pdf. Steps to reproduce: 1. Create document PDDocument document = new PDDocument(); 2. load Arial Unicode MS font: PDType0Font pdfFont = PDType0Font.load(document, document.getClass().getResourceAsStream("/ttf/arialuni.ttf")); 3. be sure that symbol has glyph int codePoint = 0x22F2; pdfFont.hasGlyph(codePoint) 4. catch strange exception PDCIDFontType2 pdcidFontType2 = (PDCIDFontType2)pdfFont.getDescendantFont(); pdcidFontType2.encode(codePoint); Do you have any suggestions to solve this problem or should I create new issue? Example is attached. Ivan Pavlyukovets
--------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org For additional commands, e-mail: users-h...@pdfbox.apache.org