pdf-renderer 把 pdf 转换成图片时报:java.io.IOException: Unknown CMap: UniGB-UCS2-H 的解决办法

参考链接:http://blog.csdn.net/ol_beta/article/details/5926451

在用 pdf-renderer 把 pdf 文件转换成图片时报:

java.io.IOException: Unknown CMap: UniGB-UCS2-H
at com.sun.pdfview.font.PDFCMap.getCMap(PDFCMap.java:67)
at com.sun.pdfview.font.PDFFontEncoding.(PDFFontEncoding.java:73)
at com.sun.pdfview.font.PDFFont.getFont(PDFFont.java:133)
at com.sun.pdfview.PDFParser.getFontFrom(PDFParser.java:1172)
at com.sun.pdfview.PDFParser.iterate(PDFParser.java:726)
at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:101)
at java.lang.Thread.run(Unknown Source)

错误,一般是因为生成的 pdf 文件是用 itextpdf 库生成 pdf 时采用了 iTextAsian.jar 中的字体,而 pdf-renderer 不能识别出这种字体,所以就报错了。
所以这个问题的关键是 itextpdf 生成 pdf 文件时采用的字体,itextpdf 生成 pdf 文件时可以采用自定义的字体,例如:

// 完整的代码可以在 https://github.com/fengsmith/java-generate-pdf-pdf-convert-to-image 上下载,里面也包含了 simsun.ttf 字体文件。
// simsun.ttf 是宋体的字体文件
BaseFont baseFont = BaseFont.createFont("D:\simsun.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(PDF_FILE_PATH));
document.open();
Paragraph p = new Paragraph("你好,中国", new Font(baseFont));
document.add(p);
document.close();

这样就可以解决这个问题。

昨天同事在做 pdf 导出图片的功能,结果遇到了这个错误,一直不能解决。查了下网上有好多人报了这个错,但没有好的解决办法。研究了一上午,终于找到了解决办法,写出来分享给大家,同时写了个 itextpdf 生成 pdf 和 pdf-renderer 转换图片的例子发布到了 https://github.com/fengsmith/java-generate-pdf-pdf-convert-to-image 。

你可能感兴趣的:(java,itextpdf,pdf-render,UniGB-UCS2)