Java使用Flying Saucer实现HTML代码生成PDF文档

1、需要的jar包:org.xhtmlrenderer.flying-saucer-pdf-itext5,Maven依赖如下:

 1 <dependency>
 2 <groupId>org.xhtmlrenderer</groupId>
 3 <artifactId>flying-saucer-pdf-itext5</artifactId>
 4 <version>9.0.7</version>
 5 </dependency>

 

2、中文支持

由于HTML代码中存在中文,需要添加中文支持,需要把需要的字体文件添加到项目中

3、转换PDF主代码

 1 /**
 2 * HTML代码转PDF文档
 3 * 
 4 * @param content 待转换的HTML代码
 5 * @param storagePath 保存为PDF文件的路径
 6 */
 7 @Override
 8 public void parsePdf(String content, String storagePath) {
 9 FileOutputStream os = null;
10 try {
11 File file = new File(storagePath);
12 if(!file.exists()) {
13 file.createNewFile();
14 }
15 os = new FileOutputStream(file);
16 
17 ITextRenderer renderer = new ITextRenderer();
18 //解决中文支持问题
19 ITextFontResolver resolver = renderer.getFontResolver();
20 resolver.addFont("/static/font/ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
21 renderer.setDocumentFromString(content);
22 // 解决图片的相对路径问题,图片路径必须以file开头
23 // renderer.getSharedContext().setBaseURL("file:/");
24 renderer.layout();
25 renderer.createPDF(os);
26 
27 } catch (DocumentException e) {
28 e.printStackTrace();
29 } catch (IOException e) {
30 e.printStackTrace();
31 }finally {
32 if(null != os) {
33 try {
34 os.close();
35 } catch (IOException e) {
36 e.printStackTrace();
37 }
38 }
39 }
40 }

 

4、如果从文件中读取HTML代码,需要使用InputStream进行读取,不要使用FileReader读取,不知道为什么,使用FileReader读取的内容解析会错误

1 StringBuilder content = new StringBuilder();
2 byte[] bys = new byte[1024];
3 int len;
4 in = new BufferedInputStream(new FileInputStream(htmlFilePath));
5 while ((len = in.read(bys)) != -1) {
6 content.append(new String(bys, 0, len));
7 }

 5、如果想把生成PDF内容返回为byte数组,可以在调用renderer.createPDF(os)方法时,传入的是ByteArrayOutputStream,然后调用输出流的toByteArray即可。

转载于:https://www.cnblogs.com/cksvsaaa/p/6008731.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值