`
yongboy
  • 浏览: 105991 次
  • 来自: ...
博客专栏
E16f1064-1c93-305c-9ed5-2118b09bada4
Servlet 3.0 学...
浏览量:0
社区版块
存档分类

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

 

 时间有限,暂时如是之。

7
1
分享到:
评论
16 楼 xiaoliuf4565 2018-12-10  
现在变成了英文或数字不换行了
15 楼 A741841403 2018-07-02  
我用flying-saucer-pdf-itext5这个maven可以使用,但是单独引入core-renderer程序没法运行了
14 楼 zqb666kkk 2014-02-12  
xizoai06 写道
粗体中文无效

同问
13 楼 xizoai06 2013-11-27  
粗体中文无效
12 楼 jjjssh 2011-12-07  
版主有没研究过,转pdf时,对于条形码不显示的情况呀
11 楼 stream1990 2011-08-31  
不好用,这个,要HTML很规范才能用
10 楼 feiyan35488 2011-05-15  
树娟king 写道
楼主 我的运行是报错如下:Exception in thread "main" java.lang.NoSuchMethodError: com.lowagie.text.pdf.BaseFont.getCharBBox(C)[I

原因是版本不对,我换了2.0.8版本后就无法执行main方法,
请楼主提供相应版本的itext下载

http://www.iteye.com/topic/1040163#2103615,请参考这篇帖子
9 楼 feiyan35488 2011-05-15  
树娟king 写道
楼主 我的运行是报错如下:Exception in thread "main" java.lang.NoSuchMethodError: com.lowagie.text.pdf.BaseFont.getCharBBox(C)[I

原因是版本不对,我换了2.0.8版本后就无法执行main方法,
请楼主提供相应版本的itext下载


无法执行main方法? 是不是忘了将2.0.8的jar放到classpath下?
8 楼 树娟king 2011-05-11  
楼主 我的运行是报错如下:Exception in thread "main" java.lang.NoSuchMethodError: com.lowagie.text.pdf.BaseFont.getCharBBox(C)[I

原因是版本不对,我换了2.0.8版本后就无法执行main方法,
请楼主提供相应版本的itext下载
7 楼 feiyan35488 2011-04-29  
没有显示出中文,郁闷
6 楼 jimlgx 2010-12-23  
解决部分中文问题,如下内容生成的pdf只有

文章test1
文章test3

其“文章”没解析出来,帮忙看看原因

测试内容:
<div sizset="0" sizcache="2" class="eitor_title">
<span>文章test1</span>
</div>
<div sizset="0" sizcache="2" class="eitor_title">
<span>文章</span>
</div>
<div sizset="0" sizcache="2" class="eitor_title">
<span>文章test3</span>
</div>
<div sizset="0" sizcache="2" class="eitor_title">
<span>文章</span>
</div>
<div sizset="0" sizcache="2" class="eitor_title">
<span>文章</span>
</div>
5 楼 jamesTian 2010-12-16  
能不能把你这里用到的包都发我一下,我的单独的中文还是出不来啊,中文中加交杂有英文才会出来.这些是我用的包
iText-2.08.jar
core-renderer.jar(你这下载的)
iTextAsian.jar

4 楼 qgm168 2010-08-09  
表格里的中文不会换行呀!!!
3 楼 zhxing 2010-02-25  
我的中文不知道出不来。。
用的包有
iText-2.08.jar
core-renderer.jar(你这下载的)
iTextAsian.jar

不知道什么问题??
2 楼 youthon 2009-11-06  
加上iTextAsian.jar,可以了
1 楼 youthon 2009-11-06  
去掉了css中字体定义,运行出现异常了
Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

相关推荐

    flying sauser生成PDF所需jar包

    flying sauser,基于iText自身的问题,让我们开始寻求可以真正意义上模版技术,那么flying sauser就是为了这个问题出现的产品,能解析HTML和CSS,而且能输出成image,PDF等格式。具体使用,请访问:...

    flyingsaucer指导文档

    ### FlyingSaucer指导文档 #### 一、简介 **FlyingSaucer**是一款功能强大的XML/CSS渲染引擎,能够将XML文件通过CSS样式表进行格式化与美化,并最终生成可显示或打印的输出结果。它支持多种输出格式,包括PDF、...

    PD4MLJAR包

    Flying Sauser实现html2pdf,纠错能力差,支持多种中文字体(部分样式不能识别),而且对html的格式也是十分的严格,如果使用一种模版的话使用Flying Sauser技术倒是不错的选择,但是对于不规则的html导出pdf就并...

    iText-2.0.8.jar、iTextAsian.jar、core-renderer.jar

    1. **iText**: iText 是一个开源的Java库,主要用于创建、修改和处理PDF文档。在本例中,我们有两个版本的iText库,即`iText-2.0.8.jar`和`iTextAsian.jar`。`iText-2.0.8.jar`是iText的旧版本,它提供了基本的PDF...

    iText-2.0.8.jar

    iText-2.0.8.jar,Freemarker+Flying sauser +Itext 整合生成PDF需要的JAR包,配合core-renderer.jar一起使用

    把HTML转成PDF

    依赖jar包:fonts.jar pd4ml.jar ss_css2.jar PD4ML实现html2pdf,速度快,纠错能力强,支持多种中文字体。相比较于IText和Flying Sauser方便许多

    struts下载带有页眉页脚处加图片并且加水印印章的pdf文件

    此资源包包含了用struts下载带有页眉页脚水印的pdf文件,并且页眉页脚处放的是图片加文字,还带有页码,其中用到的技术freemarker+itext+flying sauser整合开发,由于是刚从工程中抠出来的,不能运行起来,但功能是完好...

    Systems thinking :coping with 21st century problems - John Boardman, Brian Sauser 英文版 超清晰

    《系统思维:应对21世纪的问题》一书由John Boardman与Brian Sauser共同撰写,于2008年由CRC Press出版发行(ISBN:9781420054910)。本书旨在介绍如何运用系统思维来解决当今复杂多变的社会问题,并提供了一系列理论...

    SQL-高级开发

    EXEC sp_grantdbaccess 'sa','sauser' 给数据库用户授权 授权的语法 grant select,insert,update on scorelist to sauser 收回授权的语法 REVOKE SELECT ON scorelist to sauser 固定角色 角色名称 角色描述 ...

Global site tag (gtag.js) - Google Analytics