首页 > 编程语言 >Java-模板生成PDF方式1-itext5

Java-模板生成PDF方式1-itext5

时间:2023-06-06 15:11:19浏览次数:45  
标签:Java String acroFields itext5 static PDF message setField 模板

itext模板生成PDF

pom.xml引入依赖

<!--itext生成PDF-->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>
<!--输出中文-->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>

生成PDF的util类

 /**
     * 模板
     */
    final static String template = "templates/applying_for_volunteer_service_form_itext.pdf";
    final static String fonts_ttf = "fonts/seguisym.ttf";


    public static void generatePdf(OutputStream os, Message message, List<String> pickVolunteers, Map<String, List<DictData>> allVolunteers, List<DictData> dictData) throws IOException, DocumentException {
        InputStream templateInputStream = new ClassPathResource(template).getInputStream();
        PdfReader pdfReader = new PdfReader(templateInputStream);

        PdfStamper stamper = new PdfStamper(pdfReader, os);

        AcroFields acroFields = stamper.getAcroFields();
        acroFields.setSubstitutionFonts(Stream.of(
                BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED)
        ).collect(Collectors.toCollection(ArrayList::new)));
        BaseFont base = BaseFont.createFont(fonts_ttf, BaseFont.IDENTITY_H, false);
        acroFields.addSubstitutionFont(base);
        //填充模板中的占位符(属性名在制作模板时指定)
        acroFields.setField("name",message.getName());
        acroFields.setField("date",message.getDate());
        acroFields.setField("phone",message.getPhone());
        acroFields.setField("email",message.getEmail());
        acroFields.setField("school",message.getSchool());
        acroFields.setField("reason", message.getReason());
        acroFields.setField("speciality",message.getSpeciality());
        acroFields.setField("volunteerType",message.getVolunteerType());
        // 配置申请类型
        String volunteerTypes = buildVolunteerTypes(message.getVolunteerType(),dictData);
        acroFields.setField("volunteerTypes", volunteerTypes);
        // 配置志愿服务
        buildAllVolunteers(acroFields,allVolunteers,pickVolunteers);

        stamper.setFormFlattening(true);
        stamper.close();
    }

资源

使用到的字体

fonts/seguisym.ttf

使用到的模板

template/applying_for_volunteer_service_form_itext.pdf

源码地址

https://gitee.com/cocoxike/pdfdemo.git

效果图

image

遇到的问题

制作PDF模板

工具:Adobe Acrobat Pro DC

image

复选框

       /**
         * 复选框选中
         */
        public final static String CHECK_BOX = "☑";
        /**
         * 复选框未选中
         */
        public final static String UN_CHECK_BOX = "☐";

标签:Java,String,acroFields,itext5,static,PDF,message,setField,模板
From: https://www.cnblogs.com/xi-ke-xi/p/17460571.html

相关文章

  • Java汉字转拼音工具
    maven依赖<dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version></dependency>工具类封装packagecomg.yang.httpstest.controller.domain;importnet.......
  • 《CentOS 7系统配置与管理》pdf电子书免费下载
    本书基于CentOS7.5系统编写,且内容通用于RHEL7、Fedora等系统。内容涵盖了部署虚拟环境、安装Linux系统;常用的Linux运维命令;与文件读写操作有关的技术;使用Vim编辑器编写Shell命令脚本;配置与应用远程连接服务,用户身份与文件权限的设置;硬盘设备分区、格式化以及挂载等操作;部署RAID磁......
  • 46基于java的校园宿舍管理系统设计与实现
    本章节给大家带来一个基于java的校园宿舍管理系统设计与实现,可适用于智慧校园宿舍管理系统,基于java学生宿舍管理系统,基于java的学生宿舍管理系统,java校园宿舍系统,springboot宿舍管理系统,大学宿舍管理系统;研究背景现在的信息时代是各种资讯纷至沓来的一个年代,而这种资讯的传输......
  • pdfplumber提取pdf中的文字内容全都挤在一起,没有空格怎么办?
    问题:用如下的代码importpdfplumberpdfFile=r'pdf1.pdf'outputFile='Extract'+pdfFile.split('.')[0]+'.txt'withpdfplumber.open(pdfFile)aspdf:withopen(outputFile,'w',encoding='utf-8',buffering=1)......
  • RocketMQ:一个纯java的开源消息中间件--开发测试环境搭建
    一、简介  RocketMQ的前身是Metaq,当 Metaq 3.0发布时,产品名称改为RocketMQ    MetaQ2.x版本由于依赖了alibaba公司内部其他系统,对于公司外部用户使用不够友好,推荐使用3.0版本。   项目地址: https://github.com/alibaba/RocketMQ二、安装RocketMQ   安装Rocket......
  • Java革命性ORM框架之快速上手的Jimmer
    Jimmer是一款革命性的ORM框架,它的目标是提供一个简单易用的API,帮助开发人员更加轻松地操作数据库。Jimmer使用了Java8的新特性,如Lambda表达式和StreamAPI,使得代码更加简洁、易读。本文将详细介绍Jimmer的基本用法,并提供一些Java代码案例说明。1.什么是ORM?在介绍Jimmer之前,首......
  • java中equals与matches区别
    matches:判断字符是否与指定的正则表达式相匹配equals:判断二个字符串是否相等举例:1.看例题https://www.nowcoder.com/share/jump/3295745116860251147252.看例题https://www.nowcoder.com/share/jump/329574511686025148552总结:一个是判断是否符合正则表达式规则,另一个是判断是......
  • 利用Spring AOP与JAVA注解为系统增加日志功能
    SpringAOP一直是Spring的一个比较有特色的功能,利用它可以在现有的代码的任何地方,嵌入我们所想的逻辑功能,并且不需要改变我们现有的代码结构。   鉴于此,现在的系统已经完成了所有的功能的开发,我们需要把系统的操作日志记录起来,以方便查看某人某时执行了哪一些操作。SpringAOP可......
  • org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)
    DescriptionResourcePathLocationTypeorg.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)pom.xml/gs-rest-serviceline1MavenConfigurationProblem在学习springboot实例时,发现了这个Maven配置错误,但是不影响springboot运行。问题......
  • JAVA学习笔记基础篇_02
    ------------恢复内容开始------------#java高级应用1.补充当方法中不存在与对象相关的方法时比如直接的数字计算输出等都可以写成静态方法集合成一个工具类1.类变量与类方法(静态变量/静态方法)也就是记录变量和方法的使用次数,每次随着类的生成而生成随着类的......