修改 flying sauser(xhtmlrenderer) 源代码,中文无障碍显示

在JAVAEYE论坛,介绍一个PDF的生成方案 ,地址如下:

http://www.iteye.com/topic/509417

 

那个xhtmlrenderer组件是好用,不过默认情况下对不显示中文。按照楼主的说法,需要在CSS中定义字体:

<style type="text/css">  
<!--  
body {  
     font-family: SimSun;   
     font-size:22px;  
     font-style:italic;  
     font-weight:bold;  
     color:#00F;  
} 
-->  
</style>
 

 

还要在程序中显示定义:

 

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 = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body><p>你好啊!</p><p>这里加入图片</p><p><img src=\"hnd3.jpg\" width=\"139\" height=\"102\" /></p><p><img src=\"hnd3 (2).jpg\" width=\"140\" height=\"95\" /></p><p>测试而已!</p><p>hello the world~</p></body></html>";

		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();
}

 

 时间有限,暂时如是之。

你可能感兴趣的:(html,windows,css,OS,F#)