zoukankan      html  css  js  c++  java
  • 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即可。

  • 相关阅读:
    html和css简介;
    包装函数,面向切面的函数实现;
    RegExp
    javascript基础语法&5
    用Pyinstaller把Python3.7程序打包成可执行文件exe
    Idea下安装Lombok插件
    Moco框架jar下载地址
    安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的
    如何使用Git命令将项目从github或者服务器上克隆下来
    github怎么创建一个项目,怎么添加一个ssh-key的客户
  • 原文地址:https://www.cnblogs.com/cksvsaaa/p/6008731.html
Copyright © 2011-2022 走看看