iText输出缺少Unicode字符

我正在使用iText从java.awt.print.Printables的Java中生成PDF。 它一切正常,直到一点:

printables通常包含各种unicode字符(正如他们所做的,我猜:-)),对此,我在lib / fonts / fallback中使用了一个带有一个额外备用字体的复合字体。 在Java中,这个解决方案一切正常。

将它导出为PDF时,我已经使用我自己的FontMapper-Implementation:

public class PdfFontMapper implements FontMapper {

public BaseFont awtToPdf(Font font) {

    try {
         if(!font.getFamily().equalsIgnoreCase("Trebuchet MS")) {
                return getBaseFontFromFile(SunFontManager.getInstance().getPlatformFontPath( true ), "ARIALUNI.ttf");
         }
         else {
                return getBaseFontFromFile(SunFontManager.getInstance().getPlatformFontPath( true ), "Trebuchet MS.ttf");
         }

    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

public Font pdfToAwt(BaseFont baseFont, int size) {

    throw new UnsupportedOperationException();
}

private BaseFont getBaseFontFromFile(String directory, String filename)
        throws Exception {

    InputStream is = null;
    try {

        final ClassLoader cl = Thread.currentThread()
                .getContextClassLoader();
        is = cl.getResourceAsStream(filename);
        // is = IMappingApplication.class.getResourceAsStream(directory +
        // filename);

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        while (true) {
            int size = is.read(buf);
            if (size < 0) {
                break;
            }
            bos.write(buf, 0, size);
        }
        buf = bos.toByteArray();
        BaseFont bf = BaseFont.createFont(filename, BaseFont.IDENTITY_H,
                BaseFont.NOT_EMBEDDED, BaseFont.NOT_CACHED, buf, null);
        return bf;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        if (is != null) {
            is.close();
        }
    }
}
}

特别感谢GJ Schouten。

但不幸的是,我的基本字体“Trebuchet MS”中没有包含的字符不会被导出 - 他们只是失踪。 有趣的是,如果我只在Mapper中添加一个字体,“Arial Unicode”,它工作得很好。 那么,我当然可以只使用一种字体。 但我希望有更好的解决方案。

顺便说一下:我的备用库中的字形(Emojis)总是呈现良好。 但是我没有得到解决方案,我只能在字体/后备中使用物理字体+后备字体。

有没有人有一个想法如何解决这个问题? 顺便说一句:我已经尝试使用PDF嵌入字体,但没有用(我认为这不是必须的,因为我使用的是很常见的字体)。

问候,安迪

链接地址: http://www.djcxy.com/p/65457.html

上一篇: iText Output Missing Unicode Characters

下一篇: iText Java: Not adding phonogram symbol