Java利用itextpdf实现pdf文件生成

前言

最近公司让写一个数据页面生成pdf的功能,找了一些市面代码感觉都太麻烦,就自己综合性整合了一个便捷的工具类,开发只需简单组装数据直接调用即可快速生成pdf文件。望大家一起学习!!!
代码获取方式:

  1. 资源下载 下载源码
  2. 后台私信(一键三连哦!!!)
    Java利用itextpdf实现pdf文件生成_第1张图片

二、前期准备

1、html模版(放置接口所在项目的resourcess/templates/

需要准备一个要看到的pdf模版,利用html代码形式简单输出,其中需要动态填充的地方需要用变量进行填充
比如页面显示:
姓名:韩云中
性别:男

姓名:${name} 性别:${sex}

2、数据实体

AbstractDocumentVo 必须继承 会有个findPrimaryKey方法需要实现,return一个你这条数据的标识即可
实体字段名称必须与html${}内容一致

public class User extends AbstractDocumentVo {

    private String name;
    
    private String sex;

    @Override
    public String findPrimaryKey() {
        // 数据标识  id或则其它均可
        return this.name;
    }
}

三、代码开发

实现接口

@GetMapping("/testCreatePdf")
public void testCreatePdf(HttpServletResponse response) {

    // 方式一:前端直接给你传递这个对象
    // 方式二:通过前端传递的标识,自行去库中进行数据获取
    // ** 两种方式都需要保证html用到的字段不能存在null 不然报错
    User user = new User();
    user.setName("");
    user.setSex("");
    
    // 生成pdf路径
    PdfDocumentGenerator pdfGenerator = new PdfDocumentGenerator();
    // 生成pdf  
    // 参数一:classpath中templates下对应要用的模版名称 
    // 参数二:模板数据 
    // 参数三:生成pdf名称
    // 参数四:response
    pdfGenerator.generate("overseaAssistance.html", overseaVo, "2.pdf", response);
}

四、结果

得到自己想要的pdf文件
Java利用itextpdf实现pdf文件生成_第2张图片

测试数据

java实体

package com.yxy.aob.controller;

import com.yxy.common.core.utils.file.pdf.AbstractDocumentVo;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * @Description:
 * @Author: Hyz
 * @Date: 2024/10/11 11:22
 * @Version:1.0
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class OverseaVo extends AbstractDocumentVo {

    /**
     * 标识
     */
    private String policyNo;
    /**
     * 投保人姓名
     */
    private String holderName;
    /**
     * 投被保人关系
     */
    private String relation;
    /**
     * 投保人联络地址
     */
    private String holderAdress;
    /**
     * 投保人邮编
     */
    private String holderPostCode;

    /**
     * 被保险人姓名
     */
    private String insuredName;
    /**
     * 被保险人姓名拼音
     */
    private String insuredPingyinName;
    /**
     * 被保险人护照号码
     */
    private String insuredPassportNo;
    /**
     * 被保险人性别
     */
    private String insuredSex;
    /**
     * 被保险人出生日期
     */
    private String insuredBirthday;
    /**
     * 被保险人电话
     */
    private String insuredPhone;

    /**
     * 被保险人证件号码
     */
    private String insuredIDNo;

    /**
     * 前往国家或地区
     */
    private String destination;

    /**
     * 受益人姓名
     */
    private String beneficiaryName;

    /**
     * 备注
     */
    private String remarks;

    /**
     * 保险期间
     */
    private String period;

    /**
     * 境外意外伤害或残疾保额
     */
    private String accidentalSumInsured;

    /**
     * 紧急救援医疗保额
     */
    private String emergencySumInsured;

    /**
     * 附加境外紧急救援医保额
     */
    private String medicalSumInsured;

    /**
     * 总保费
     */
    private String premium;
    /**
     * 签发日期
     */
    private String issueDate;

    /**
     * 省份
     */
    private String branchName;

    /**
     * 合作公司名称
     */
    private String companyName;

    @Override
    public String findPrimaryKey() {
        return this.policyNo;
    }
}

html模版



    
    


测试PDF生成--

测试单号:${policyNo}

投保人
Policyholder
${holderName}
与被保险人关系
Relationship with the Insured
${relation}
联络地址
Correspondence Address
${holderAdress} 邮编
Postal Code
${holderPostCode}
被保险人姓名
Name of the Insured
${holderName} (拼音)
(Pinyin)
${insuredPingyinName} 护照号码
Passport No
${insuredPassportNo}
性别
Sex
${insuredSex} 出生日期
Date of Birth
${insuredBirthday} 电话
Telephone No.
${insuredPhone} 证件号码
ID No.
${insuredIDNo}
请详细列明前往国家或地区
Destination
${destination} 受益人姓名
Beneficiary
${beneficiaryName}
备注
Remarks
${remarks}
保险期间
Insurance period
${period}


总经理签名:
Authorized Signature
公司签章:
Company Stamp
签发日期:
Issue Date
${issueDate}

我从来不是那样的人,不能耐心地拾起一地碎片,把它们凑合在一起,然后对自己说,这个修补好了的东西,跟新的完全一样。一样东西破碎了就是破碎了,我宁愿记住它最好时的模样,而不想把它修补好,然后终生看着那些碎了的地方。

你可能感兴趣的:(日常栏目,java,pdf,ajax)