在JAVAEYE论坛,介绍一个PDF的生成方案 ,地址如下:
http://www.iteye.com/topic/509417
那个xhtmlrenderer组件是好用,不过默认情况下对不显示中文。按照楼主的说法,需要在CSS中定义字体:
还要在程序中显示定义:
ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
若不定义呢 ?
自然显示不了中文,很多情况下,我们不一定在html中显示指定CSS使用字体。或者html内容就是一段字符串。
怎么办,自然是修改xhtmlrenderer中PDF字体定义部分了。
附件中有修改后的xhtmlrenderer核心包,已经对中文自动支持。
客户端代码补上:
public static void main(String[] args) throws Exception { String outputFile = "f:/teste/html/firstdoc.pdf"; OutputStream os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer(); String html = "你好啊!
这里加入图片
测试而已!
hello the world~
"; renderer.setDocumentFromString(html); // 解决图片的相对路径问题 renderer.getSharedContext().setBaseURL("file:/F:/teste/html/"); renderer.layout(); renderer.createPDF(os); os.close(); System.out.println("生成成功!"); }
我这边代码拷贝自楼主,修改一下,如上,没有在html中定义样式。中文显示正常。
需要 iTextAsian.jar,以及修改后的源代码包。
附件中有生成PDF
修改 xhtmlrenderer 代码如下:
找到 org.xhtmlrenderer.pdf.ITextOutputDevice 类,找到
cb.setFontAndSize(_font.getFontDescription().getFont(), _font.getSize2D() / _dotsPerPoint);
替换成:
try { cb.setFontAndSize(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), _font.getSize2D()/_dotsPerPoint); } catch (Exception e) { System.out.println("ITextOutputDevice.java drawString方法字体设置错误!"); e.printStackTrace(); }
时间有限,暂时如是之。