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

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

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

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

Html代码

还要在程序中显示定义:

代码
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(“C://fonts/simsun.ttc”, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

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(“生成成功!”);
}

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

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. drawString方法字体设置错误!”);
e.printStackTrace();
}

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

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《修改 flying sauser(xhtmlrenderer) 源代码-中文无障碍显示
本文地址:https://www.zhiletu.com/archives-381.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微