使用HTML或者FTL(Freemarker模板)生成PDF 示例2

本文介绍如何利用html2pdf和Freemarker模板技术生成PDF文件。通过配置pom.xml,创建ITextUtils和FreeMarkerConfigurer工具类,以及在指定目录下放置字体、图片和模板文件,我们可以实现从HTML或FTL到PDF的转换。模板文件protocolTemplate.ftl中可以直接引用图片,并通过调用相关方法完成PDF生成。注意字体和图片需在同一目录,模板文件引用图片只需提供图片名称。
摘要由CSDN通过智能技术生成

2. html2pdf 使用html或者ftl生产pdf

引入 pom.xml 

        <dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>io</artifactId>
			<version>7.1.5</version>
		</dependency>
        <!--  https://mvnrepository.com/artifact/com.itextpdf/kernel  -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>kernel</artifactId>
            <version>7.1.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.itextpdf/layout -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>layout</artifactId>
            <version>7.1.5</version>
        </dependency>
		<!-- https://mvnrepository.com/artifact/com.itextpdf/styled-xml-parser -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>styled-xml-parser</artifactId>
            <version>7.1.5</version>
        </dependency>
		<!--  https://mvnrepository.com/artifact/com.itextpdf/html2pdf  -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>html2pdf</artifactId>
			<version>2.1.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker  -->
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.28</version>
		</dependency>


		<dependency>
			<groupId>org.xhtmlrenderer</groupId>
			<artifactId>flying-saucer-pdf</artifactId>
			<version>9.0.8</version>
		</dependency>

主要工具类ITextUtis

package com.ssish.eoms.util;

import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.io.IOException;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfString;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.WriterProperties;
import com.itextpdf.layout.font.FontProvider;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.URISyntaxException;

/**
 * @author wyw
 * @Description iText工具类
 * @date 2019/7/15 15:36
 */
public class ITextUtis {

    /**字体构建器*/
    private static ConverterProperties fontProps;

    /**
     * 初始化字体解析器
     * @param resourcePrefix
     * @return
     */
    private static void initConverterProperties(String resourcePrefix) {
        fontProps = new ConverterProperties();
        FontProvider fp = new FontProvider();
        //fp.addStandardPdfFonts();//标准化PDF字体
        fp.addDirectory(resourcePrefix);
        //fp.addSystemFonts();//添加系统字体
        fontProps.setFontProvider(fp);
        fontProps.setBaseUri(resourcePrefix);
        fontProps.setCharset("UTF-8");
    }

    /**
     * html转pdf文件的方法
     * @param html html内容
     * @param outFilePath 文件输出位置,如/data/test.pdf
     * @return 生成的pdf文件路径
     * @throws Exception
     */
    public static String html2pdf(String html, String outFilePath) throws Exception {
        PdfDocument pdfDoc = null;
        FileOutputStream out = null;
        PdfWriter pdfWriter = null;
        try {
            out = new FileOutputStream(outFilePath);
            WriterProperties writerProperties = new WriterProperties();
            writerProperties.addXmpMetadata();
            pdfWriter = new PdfWriter(out, writerProperties);
            //创建一个空白PDF文档
            pdfDoc = new PdfDocument(pdfWriter);
            pdfDoc.setDefaultPageSize(PageSize.A4);//默认A4大小
            pdfDoc.getCatalog().setLang(new PdfString("zh-CN"));
            if (null == fontProps) {
                String fontPath = getResourcesFilePath("template/font/");
                System.out.println("FontPath===================" + fontPath);
                initConverterProperties(fontPath);
            }
            //开
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值