Java读取pdf模板,并动态生成pdf文件,如动态生成准考证、学位证书等

java根据模板生成pdf文件(itextpdf) 阅读详情

Java读取pdf模板,并动态生成pdf文件,如动态生成准考证

​ 前几天遇到了一个生成准考证的需求,并提供用户下载,然后百度了一圈还是觉得使用itextpdf这个框架好用点。但是还需要找到一个能创建pdf表单的工具来生成pdf模板。可以使用Adobe Acrobat进行创建,但是我自己电脑上刚好有一个软件可以制作就没有去下载了😆

​ 下面只是用到了itextpdf一部分的功能,如果还有其他字体格式、样式的需求可以参考他的官方网址Overview (iText 5.5.13 API) (itextpdf.com)

1. 模板制作

我是用的是一款pj软件PDFelement,当初下它是用来转换pdf到word,没想到也可以制作pdf表单😀

在这里插入图片描述

可能有点看不清楚框框里写的啥,就是写的后端实体类中属性的名称,dddd最好一一对应嘛

2. 效果展示

还可以吧,此准考证模板地址:https://download.youkuaiyun.com/download/SleepNot_Need/87576794
在这里插入图片描述

3. 导入依赖

在pom.xml里导入下面两个依赖就行了

        <!--pdf-->
        <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>

        <!-- 这个主要用来设置样式什么的 -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

4. 数据填充

public class PdfTest {
    public static void main(String[] args) {
        // 模板地址
        String tempPath = "D:\\test\\ticketPdfTemplate.pdf";
        // 生成pdf后的保存地址
        String outTempPath = "D:\\test\\ticketPdf.pdf";
        File old = new File(outTempPath);
        if (old.exists()){
            old.delete();
        }

        PdfReader reader;
        FileOutputStream out;
        ByteArrayOutputStream bos;
        PdfStamper pdfStamper;

        try {
            // 查询准考证数据
            ScpStudentAdmissionTicket ticket = this.baseMapper.selectById(id);

            // 读取pdf模板
            reader = new PdfReader(tempPath);
            // 将填充完成后的pdf输出到指定位置
            out = new FileOutputStream(outTempPath);
            bos = new ByteArrayOutputStream();
            pdfStamper = new PdfStamper(reader, bos);

            // 获取到表单集合
            AcroFields acroFields = pdfStamper.getAcroFields();
            // 加载字体
            BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            // 设置写入字体
            acroFields.addSubstitutionFont(font);

            // 设置文本信息
            acroFields.setField("activityName", ticket.getActivityName());
            acroFields.setField("studentName", ticket.getStudentName());
            acroFields.setField("admissionNumber", ticket.getAdmissionNumber());
            acroFields.setField("idCard", ticket.getIdCard());
            acroFields.setField("examination", ticket.getExamination());
            LocalDateTime examBeginTime = ticket.getExamBeginTime();
            LocalDateTime examEndTime = ticket.getExamEndTime();
            String time = examBeginTime.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 "))
                    + examBeginTime.format(DateTimeFormatter.ofPattern("HH:mm"))
                    + " - "
                    + examEndTime.format(DateTimeFormatter.ofPattern("HH:mm"));
            acroFields.setField("examinationTime", time);

            // 设置图片
            String url = ticket.getUrl();
            // 根据地址读取需要放入pdf中的图片
            Image image = Image.getInstance(url);

            // 设置图片在哪一页
            PdfContentByte overContent = pdfStamper.getOverContent(acroFields.getFieldPositions("image").get(0).page);
            // 获取模板中图片域的大小
            Rectangle signRect = acroFields.getFieldPositions("image").get(0).position;
            float x = signRect.getLeft();
            float y = signRect.getBottom();
            // 图片等比缩放
            image.scaleAbsolute(signRect.getWidth(), signRect.getHeight());
            // 图片位置
            image.setAbsolutePosition(x, y);
            // 在该页加入图片
            overContent.addImage(image);

            // 如果为false那么生成的PDF文件还能编辑,一定要设为true
            pdfStamper.setFormFlattening(true);
            pdfStamper.close();
            Document doc = new Document();
            PdfCopy copy= new PdfCopy(doc, out);
            doc.open();
            PdfImportedPage importedPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
            copy.addPage(importedPage);
            doc.close();
        } catch (IOException | DocumentException e) {
            e.printStackTrace();
        }
    }
}

这里贴出来查询出来的准考证数据

{
“idCard”:“110101199003075939”,
“examEndTime”:“2021-01-01 09:00:00”,
“examBeginTime”:“2021-01-01 01:00:00”,
“examination”:“清华大学”,
“id”:“1428543333891039233”,
“activityName”:“物理竞赛”,
“admissionNumber”:“20210102”,
“studentName”:“学生姓名”,
“url”:“http://localhost/image/20210818/89fca5330db5bd2c6141d9b69973f062.png”
}

手摸手系列之 Java 通过 PDF 模板生成 PDF 功能 总得来说,Java通过itext PDF模板生成PDF文件功能很简单,主要是数据的填充而已。还可以继续丰富下,比如多行文本、自动换行功能等。 阅读详情

相关推荐

java根据PDF模板自动生成PDF文件

用途:根据PDF模板生成PDF文件,将数据库查询的数据插入到模板指定未知,然后生成新的PDF文件 原理: 代码说明:exprotPDF_Main 为主文件。调用了outpdf1的两个文件的方法。outpdf1里的方法,是通过outpdf2345678这几个里面的内容参考出来的。功能很强大。可以随意改。 根据PDF模板导出PDF文件。支持各种java调用数据库数据,生成PDF文件。多个版本供参考。

Java使用pdf模板生成pdf文件

有时候,业务中我们需要使用pdf模板生成一份pdf文件。如何生成pdf文件?如下,我们把左侧的模板生成为右侧的填充文件。

不积跬步,无以至千里 2万+

自动生成高考准考证

你可以使用它来生成你的高开准考证

Java 根据模板导出PDF

本文为我搜集的根据模板导出PDF的方法整理而来,所以贴了好多帖子的链接。有的方法仅适合特殊的业务场景,可以根据业务需求选择合适的方法。写的不好请轻喷。

qq_38998209的博客 2254

MIT 6.824分布式 LAB4A:ShardCtrler

lab 4要求实现一个使用raft共识算法的分片存储系统。而在lab 4a中,我们仅需实现分片控制器的功能。lab4中的分片存储系统有多个分片,这些数据分布在众多分片上,而每个分片都对应着一个集群组,可能一个集群组负责多个分片,一个集群组内的所有服务器都会使用raft共识算法进行状态的复制。而本实验的重点为分片控制器,主要负责的工作是对集群组和分片之间关系的管理,我们仅需在/src/shardctrler文件夹中对client.go,server.go,common.go这三个文件进行修改即可。注意事项(实

MarksSa的博客 832

【LaTeX PPT模板集】Beamer主题与配色使用教程

【LaTeX PPT模板集】Beamer主题与配色使用教程

Xminyang的博客 1万+

Java-根据模板生成PDF

在有些场景下我们可能需要根据指定的模板来生成 PDF,比如说合同、收据、发票等等。因为 PDF 是不可编辑的,所以用代码直接对 PDF 文件进行修改是很不方便的,这里我是通过itext和来实现的,以下就是具体实现方法。个人觉得代码实现起来不是很难,关键是要知道如何使用工具设置 PDF 模板以及itext的一些 API 的使用,以后有时间我会出一篇关于iText的博客,主要介绍iText在日常开发中的主要应用。为何选择iText?

xhmico的博客 1万+

Python量化交易实战:如何用vnpy+Tushare获取股票历史数据(附完整代码)

本文详细介绍了如何利用vn.py框架与Tushare数据接口,构建一个健壮的Python量化交易数据获取引擎。通过封装Tushare API,实现股票历史数据的自动化获取与格式转换,并适配vn.py的BarData结构,为策略回测与实盘交易提供稳定、高效的数据基础。文中提供了完整的代码实现,涵盖环境配置、核心封装逻辑及高级功能扩展。

cola5的博客 1221

java实现根据pdf文件模板生成pdf文件

一、如何制作pdf模板 1.首先创建template.doc 2.根据doc文件制作pdf模板 3.将doc文件输出为pdf   文件->输出为pdf 4.输出的pdf文件 5.使用Adobe Acrobat DC打开template.pdf 6.填充文字及创作表单 创作表单->添加“文本”域   创作表单->编辑“表格” *填充的字段名(比如对象Table的属性为name,这里名称后面一列的单元格填充name) 7.模板制作...

qq_24466961的博客 7296

Cadence SIP Layout 简单教程-第一章

以摄像头模组软硬结合板为例,描述layout的整个完整过程,从而掌握基本技能。 第一章 准备工作 第一节 原理图不用说layout前需要绘制原理图,原理图不在本文讨论范围内,所以列为准备工作。 需要特别说明的是,绘制原理的最终目的是导出网络表,网络表中的重要参数footprint是让layout软件选择正确封装的关键,所以这里讲解一下原理图设置footprint的位置。在原理图中双击零件,...

whp1920的博客 1万+

使用 MATLAB/Simulink 搭建一个步进电机细分控制系统的仿真模型

步进电机(Stepper Motor)是一种将电脉冲信号转换为角位移或线位移的执行元件,广泛应用于数控机床、3D打印、机器人、精密仪器等领域。其特点是开环控制、定位精度高、响应快、无累积误差。然而,传统步进电机在整步或半步运行时存在振动大、噪音高、转矩波动明显等问题。为了解决这些问题,细分控制技术被广泛采用。细分控制通过对绕组电流进行精确控制,使转子在两个整步之间实现平滑移动,从而提升电机的运行平稳性和位置精度。本教程将带你使用搭建一个步进电机细分控制系统的仿真模型,并通过仿真分析其。

amy_mhd的博客 427

实战教学!JAVA根据PDF表单模板生成PDF文件(附带模板设计)

数据填充到pdf的表单中,生成pdf文件

Su7148的博客 4331

我的世界模组开发——前言

避坑:在开发过程中一定不要过分依赖AI,虽说现在的人工智能很厉害,但是也有很大的弊端,很多AI生成的代码错误百出,还得自己修改,而且像deepseek这种AI的训练数据还停留在一年前,给出的maven仓库地址都是过时的甚至是错误的,开发模组就是要多学习,多看源码,这样开发模组的水平才能越来越高。总而言之,build.gradle文件在我的世界Forge模组开发中扮演了重要的角色,它定义了项目的构建过程、依赖关系和编译选项,为开发者提供了灵活而强大的构建工具。开发工具推荐使用idea,因为可以使用通灵义码。

qq_24992377的博客 2594

java根据模板导出pdf

java通过模板导出pdf

weixin_43083853的博客 7223

2 硬件工程师笔面试高频知识考点真题解析——电容

本文全面解析了电容在电子电路中的关键应用与技术要点。主要内容包括:1. 电容选型核心要素:介质材质(陶瓷/电解/钽电容等)、容值精度、耐压等级、温度特性、ESR参数等,不同应用场景(滤波/去耦/谐振等)的选型策略。2. 典型电路应用原理:详细阐述去耦电容布局规则、晶振负载电容作用、共射放大电路旁路电容功能,以及RC电路的滤波/定时等应用。3. 特殊问题解决方案:MLCC啸叫机理与对策、寄生电容影响与消除、高速信号线电容使用禁忌等工程实践难题。4. 安全规范要点:X/Y电容的区别与选用、电解/钽电容防反接措施

XU157303764的博客 1564

西门子 S7-1200 G2 高速计数器的使用方法介绍

西门子 S7-1200 G2 高速计数器的使用方法介绍

Robot_PLC_HMI_Automation 1699

java根据pdf模板生成pdf

【代码】java根据pdf模板生成pdf。

liqinglonguo的博客 1298

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java利用模板生成PDF

java利用模板生成PDF

khbilhjknkjb的博客 3548

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java生成PDF(图片,模板,表格)

java生成pdf(单模板、多模板+图片+表格,包括页头/页脚及水印)

qq_45699784的博客 3万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java根据模板导出pdf,并将多个pdf合成一个

java根据模板生成动态pdf,并将多个pdf合并

weixin_43945397的博客 2987

java根据模板生成pdf文件并导出

首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:http://pan.baidu.com/s/1pL2klzt)如果无法下载可以联系博主。 4.点击右边的"准备表单"按钮,选择"测试.pdf"选择

TOP__ONE的博客 13万+

java 根据模板生成pdf文件

第一步引入依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.1</version> &l...

qq_36491545的博客 2874

java按照模板导出pdf或者word

java通过固定模板,填充数据,导出pdf或者word

weixin_40052304的博客 9329

Java实现PDF模板数据填充生成PDF

java实现PDF模板数据填充,使用PDF模板工具itextpdf生成PDF

baduoan_yu_ni的博客 1899

Java导出根据模板PDF(Springboot+Adobe Acrobat)

1、使用Adobe Acrobat创建PDF模板(设置文本域),文本域命名对应Java实体类。4、导出效果(字体和换行可在Adobe Acrobat中设置)3、编写实现类和控制类。

xiaosong2001的博客 1438

Java 生成各种 PDF 实战方案(图片、模板、表格)

刚接到了一个需求,生成一个pdf,一开始以为挺简单的,通过模板生成嘛,我也发过相应的文章,根据模板直接生成pdf,响应到前端或者根据模板生成pdf,直接指定下载位置,这两种方案都可以,不过这篇文章主要讲的生成的pdf是既有模板填充还需要自己动态生成表格,包括还需要通过java去生成Echarts图形,通过java后台生成Echarts图形我专门写了一篇文章介绍,java后台生成统计图,这个生成...

程序员小明1024 4082
上一篇: Java读取word模板,并动态生成word
下一篇: Ubuntu 18.04 安装 openjdk 11失败解决方法
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值