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