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

Reply via email to