iText7 大批量文字时,html转pdf操作文档

2019-02-26  本文已影响0人  不负好时光__

一、准备工作

1.根据原有的pdf模板,制作html模板。

image image

图一为原有的pdf格式的模板,图中的蓝色区域是可以填充内容的区域,区域固定不可根据填充的内容自动扩充。为了可以使模板更加灵活,设计了html模板,如图二所示,该模板构造为:第1部分是一个样式居中的<div>标签,第2、4部分是一个<table>表格,第3部分是一个具有首行缩进样式的<div>标签。

2.准备fft格式的字体文件,用户html生成pdf时的字体渲染。

二、开发工作

1.创建maven项目,导包


<!-- 添加itext 7 用到的包 -->

    <dependency>

      <groupId>com.itextpdf</groupId>

      <artifactId>itext7-core</artifactId>

      <version>${itext.version}</version>

      <type>pom</type>

    </dependency>

    <!--itext7 html转pdf用到的包-->

    <dependency>

      <groupId>com.itextpdf</groupId>

      <artifactId>html2pdf</artifactId>

      <version>2.0.0</version>

    </dependency>

  <!--itext7支持中文-->

    <dependency>

      <groupId>com.itextpdf</groupId>

      <artifactId>font-asian</artifactId>

      <version>7.1.2</version>

    </dependency>

<!--jsoup 操作html的包-->

    <dependency>

      <groupId>org.jsoup</groupId>

      <artifactId>jsoup</artifactId>

      <version>1.10.2</version>

    </dependency>

2.将准备的字体和html模板复制到项目的resources目录中。

image.png

3.主要实现代码

 /**
     *
     * @param baseUri   html用到的css、js、图片等资源根目录。
     * @param src       html模板文件路径
     * @param dest      生成的pdf文件输出的路径
     * @throws IOException
     */
    public void createPdf(String baseUri, String src, String dest) throws IOException {
        try {
            //字体方案
            fontProgram = FontProgramFactory.createFont(FONT);
            //转换为pfd中的属性设置对象
            ConverterProperties proper = new ConverterProperties();
            //字体设置,解决中文不显示问题
            FontSet fontSet = new FontSet();
            fontSet.addFont(fontProgram, PdfEncodings.IDENTITY_H);
            FontProvider fontProvider = new FontProvider(fontSet);
            proper.setFontProvider(fontProvider);
            //html用到的css、js、图片等资源根目录。
            proper.setBaseUri(baseUri);
            //开始转换
            HtmlConverter.convertToPdf(new FileInputStream(src),
                     new FileOutputStream(dest), proper);
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

4.执行

准备一篇文章,如下图三所示,该文章的大小为1.07MB,将这些文字填充到html中的效果图为图四,执行程序转成pdf文件,所有时间为1680ms。

图三、txt文件大小
图四、html效果图
上一篇下一篇

猜你喜欢

热点阅读