Java按照固定pdf模板生成pdf文件——itext

poi完成word、excel、pdf添加斜体水印 poi操作常用文件添加水印 阅读详情

第一步:生成pdf模板

       先用word写好固定格式的文档,再利用wps将文档转成pdf文件,然后利用Adobe Acrobat DC(此工具是收费的,可以百度搜索进行破解)进行表单域编辑(如下图),编辑成自己想要的模板文件。

第二步:新建项目

在开发者工具中新建项目,导入jar包或写入maven依赖配置,我在这里用的itext的jar,但itext是收费的,所以也是破解版的,我没有用到maven构建项目,所以我直接导入了这个三个jar包(itextpdf-5.5.5.jar、itext-asian-5.2.0.jar、fontbox-2.0.12.jar)

fontbox-2.0.12.jar (官网下载的fontbox-2.0.12.jar没有中文字体,修改过后的jar包)下载链接https://download.youkuaiyun.com/download/javabigadog/10932972

第三步:根据开发需求编写demo

       我完成的demo可以添加文本域和图片域、还可以给pdf文件添加水印

/**

*map为表单域所对应的数据,若是图片,则为图片本地路径

/

public  String createPDF(Map<String, String> map) {

      //模板所处位置
        String templatePdfUrl ="C:\\temp\\Template.pdf";
        String pdfUrl = "C:\\temp\\test.pdf";
        PdfReader reader = null;
        AcroFields af = null;
        PdfStamper ps = null;
        ByteArrayOutputStream bos = null;
        FileOutputStream fos = null;    
        //加入pdf内容
        try {
            reader = new PdfReader(templatePdfUrl);
            bos = new ByteArrayOutputStream();
            ps = new PdfStamper(reader,bos);
            af = ps.getAcroFields();            
            //使用中文字体
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);            
            af.addSubstitutionFont(bfChinese);
            System.out.println("size:"+map.size());

            //给表单文本域赋值
            Set<Entry<String, String>> set = map.entrySet();
            Iterator<Entry<String, String>> it = set.iterator();
            Entry<String, String> entry = null;
            while (it.hasNext()) {
                entry = it.next();
                if(entry.getValue()!=null) {
                    System.out.println("key:"+entry.getKey()+" "+entry.getValue());
                    af.setField(entry.getKey(), entry.getValue());
                }
            }
            //设置不能编辑
            ps.setFormFlattening(true);
            //添加图片
            String imgpath=map.get("IMGURL");
            File imgFile = new File( imgpath);
            if(imgFile.exists()) {
                int pageNo1 = af.getFieldPositions("DZYZ_af_image").get(0).page;
                Rectangle signRect1 = af.getFieldPositions("DZYZ_af_image").get(0).position;
                float x1 = signRect1.getLeft();
                float y1 = signRect1.getBottom();
                Image image1 = Image.getInstance( imgpath);
                PdfContentByte under1 = ps.getOverContent(pageNo1);
                image1.scaleToFit(signRect1.getWidth(),signRect1.getHeight());
                image1.setAbsolutePosition(x1,y1);
                under1.addImage(image1);
            }       
            //添加水印
            String waterMarkName=map.get("waterMarkName");
            PdfContentByte under;
            Rectangle wmRect =ps.getReader().getPageSizeWithRotation(1);
            under = ps.getOverContent(1);
            under.saveState();
            // set Transparency
            PdfGState gs = new PdfGState();
            // 设置透明度为0.2
            gs.setFillOpacity(0.2f);
            under.setGState(gs);
            under.restoreState();
            under.beginText();

           //设置字体和字体大小
            under.setFontAndSize(bfChinese, 18);
            under.setTextMatrix(30, 30);
            under.setColorFill(new BaseColor(179,185,181));
            for (int y = 0; y < 10; y++) {
                for (int x = 0; x < 8; x++) {
                    // 水印文字成35度角倾斜
                    under.showTextAligned(Element.ALIGN_LEFT
                            , waterMarkName, 5+ 260* x, 260*y, 35);    
            }
            under.endText();
            under.setLineWidth(1f);
            under.stroke();     
            ps.close();
            reader.close();
            fos = new FileOutputStream(pdfUrl);
            fos.write(bos.toByteArray());
            fos.flush();
        } catch (IOException|DocumentException e) {
            e.printStackTrace();
        }finally{
            try {
                if(fos!=null) {
                    fos.close();                    
                }
                if(bos!=null) {
                    bos.close();                    
                }
                if(reader!=null) {
                    reader.close();                    
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }        
        return pdfUrl;
    }

▄█▀█●老铁,站住!别跑,我又不收你钱,如果我的demo能够帮助到你,请给我一个赞吧!

Java 导出 Pdf 格式表单 前言   作为开发人员,工作中难免会遇到复杂表单的导出,接下来介绍一种通过Java利用模板便捷导出Pdf表单的方式 模拟需求   需求:按照下面格式导出pdf格式的学生成绩单 准备工作 Excel软件 Adobe Acrobat XI Pro软件 模板制作 第一步:利用Excel制作出上述表单,设置好字体、行高、列宽等,如下: 第二步:按照给定模板做好Excel表单后,删除需要后期填充的数据 第三步:打开Adobe Acrobat XI Pro软件,开始依... 阅读详情

相关推荐

PDF处理还收费?不可能

收集整理每周优质开发者内容,包括、、等方面,每周五首发于。

jakpopc的博客 5526

# Itext Pdf 5 教程

使用ItextPdf 5 打印 PDF

不积跬步,无以至千里;不积小流,无以成江海 6873

利用Itext中table动态生成PDF模板

不同与模板的方式实现在线PDF打印,通过Itext中table类型的设计要求,实现了动态PDF的生成,解决了固定模板生成PDF太过于死板的问题。

jianghao19932012的博客 8773

Java使用pdf模板生成pdf文件

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

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

freemarker+Aspose.word实现模板生成word并转成pdf

使用itext模板导出pdf适用范围业务生成的 pdf 是具有固定格式或者模板的文字及其图片等内容,使用模板,只需要将不一致的地方改成文本域,然后进行文字填充就可以了;如果涉及的业务不能有模块化可以提取出来东西,从开头一步一步去绘画。参考链接JAVA 使用Itext模板生成pdf,解决图片插入,文本域超出字体缩放,半自动换行[https://blog.youkuaiyun.com/a_lllk/article/details/109450972]

m0_53098280的博客 2706

JAVA利用ITextPdf库操作生成PDF预览文件

通过这次的需求学习到了JAVA里生成操作pdf文件的方法。先制作PDF表格模板,设置文字域,可以处理掉导出数据中的固定部分数据 针对表格类的数据,长度不固定,需要通过生成PDF表格来进行处理。

qq_66627105的博客 1386

java使用itext填充pdf模板,超简单教学,有手就行

java使用itext填充pdf模板1、先去建一个Word文件,设置好想要填充的地方,留好位置,设置好下划线2、将Word另存为pdf3、打开电脑中的Adobe Acrobat pro DC(这个应该win10 都有,搜索一下就出来了),点击 文件→创建→创建表单4、然后导入刚刚生成的pdf会出来这个页面双击这个阴影部分,将名称改成你要设置的名称,后面要根据这个名称来给他赋值全部设置好以后就可以另存为了5、前期的pdf模板准备好了,就开始上代码!1、首先导入我们所需要的依赖 1、先去建一个Word文件,设

叫我泪下的博客 2万+

Java PDF生成实战:iText 7编程与模板填充核心技术解析

在企业级应用开发中,PDF文档的生成与处理是常见的需求,尤其是在报表、合同、票据等场景。其核心原理在于将数据与样式分离,通过编程或模板填充的方式动态生成标准化文档。这项技术的关键价值在于提升开发效率、保证文档格式统一,并支持批量处理。从技术实现层面,Java开发者通常借助成熟的PDF处理库来完成,其中iText作为生态中的老牌工具,提供了从零构建和模板填充两种主流方案。在实际应用中,根据文档版式的固定性与内容的动态性进行选型至关重要:对于格式固定、样式复杂的文档,推荐使用PDF模板填充技术;对于内容高度动态

weixin_30251829的博客 436

JAVA 使用Itext模板生成pdf,解决图片插入,文本域超出字体缩放,半自动换行

1.前言 前一段时间遇到一个制作Pdf的业务,自己下来摸索了一下,基本上解决。将其中遇到的几个问题及解决方法做以记录,仅供大家参考。 首先在这里对于刚接触该类型业务的同学说明下,ItexPdf支持使用模板生成pdf和直接绘画pdf。我个人的理解在于,假如你涉及的业务生成的pdf是具有固定格式或者模快的文字及其图片等内容,我这里建议使用模板,只需要将不一致的地方改成文本域,然后进行文字填充就ok了。如果涉及的业务不能有模块化可以提取出来东西,我这边建议直接从开头一步一步去绘画。本文主要介绍使用pdf...

a_lllk的博客 1万+

Java后端PDF生成实战:iText 7核心用法与模板化开发指南

PDF作为一种跨平台、格式固定的文档格式,在Java后端开发中广泛应用于报表、合同、凭证等场景。其生成原理通常涉及文档对象模型构建、页面布局渲染和内容流写入。iText作为Java领域成熟的PDF处理库,提供了从基础文档创建到高级模板填充的完整解决方案,技术价值在于能够将动态数据与固定格式高效结合,提升文档生成的专业度和开发效率。在应用场景上,无论是Spring Boot项目中的动态报告导出,还是基于预设计模板的合同、发票数据填充,iText都能胜任。本文聚焦于iText 7的核心模块化设计、中文字体处理等

weixin_33843947的博客 414

Java+itext PDF模板导出项目实战

开发者可以根据自己的需求创建不同的事件处理逻辑。例如,可以监测到何时文档中插入了一个图像或表格,并对这些元素进行额外的处理,比如为它们添加边框或背景。// 对图像元素进行特殊处理// 为图像添加红色边框// 其他事件处理方法...在实际应用中,通常需要在文档的开始处注册事件监听器,如以下代码所示:// 添加内容到文档...

weixin_32251525的博客 455

Java 使用Itext导出固定模板的pdf文件

场景:java中使用Itext导出pdf 前期准备:下载Adobe Acrobat DC 软件 前期制作需要导出的pdf模板 模板制作步骤 先在word文档上制作出自己需要的模板样式,例如: 把该word保存成pdf格式,然后再用软件打开 给需要填值的地方添加文本域,并填上代码中对应的字段 最后另存到需要存放的地址,格式为pdf 具体代码实现 依赖 <dependency> <groupId>com.itextpdf</g

qq_42493919的博客 1077

Windows11家庭版开启虚拟化与WSL安装操作手册

Windows 11 家庭版完全支持 WSL 2,无需升级到专业版即可享受 Linux 开发环境。通过本手册介绍的步骤,您可以顺利安装和配置 WSL,并掌握系统更新后的维护技巧。WSL 为开发者提供了在 Windows 环境下使用 Linux 工具链的便利,尤其适合需要跨平台开发的场景。随着使用深入,您会发现 WSL 生态系统的强大之处,它不仅能提高开发效率,还能让 Windows 用户体验到 Linux 的强大功能。建议定期查看微软官方文档,了解 WSL 的最新功能和最佳实践。

m0_54846764的博客 3028

java使用IText和wkhtmltopdf把html模板生成pdf文件并部署linux

java使用IText和wkhtmltopdf把html模板生成pdf文件并部署linux

libinqqq的博客 1316

开题报告该怎么写

考研即将来临,而一般很多大学都会选择在考研结束之后开始安排选题和开题报考(考研之前一般都不谈,老师也很人性化的,不愿意耽误你的复习) 但无论怎么推迟,我们最终都需要去面对并完成这些任务。 现在我就要教大家该如何写一个完整的开题报告! 准备模板。不同的学校有不同的格式,一般情况你的导师会给你们一个学校的标准格式,这个不用太费心。有了模板我们就可以按照模板的“线索”一步一步填充完成即可! 一般大致格式可谓: 研究背景/论文的目的、背景和意义 我们需要写明选择该题目的...

wuyueweifeng的博客 1098

配电网可靠性评估(一)—最小路法和非序贯蒙特卡洛模拟法的matlab实现

电力系统的可靠性研究是相关领域的热点问题。根据研究对象的不同,又可分为发电系统的可靠性,输电系统的可靠性和配电系统的可靠性。配电网在电力系统中处于最末端的位置,直接和用户相连,一旦出现故障情况,就会在用户侧表现为停电事故。因此对配电网的可靠性评估有着重大意义。......

配电网和matlab的博客 1万+

Itext 7 生成PDF总结

前言:生成pdf有很多种方法,本文使用itextpdf 7 生成 1、根据PDF的需求分为静态数据动态数据以及特殊数据 1).静态数据是数据固定,所以我们采用模板的方式进行生成-----itextpdf + Adobe Acrobat DC 填充模板生成 Adobe Acrobat DC可以在网上下载绿色版 (1).先将文件通过WPS生成PDF文件 (2).用Adobe Acrobat DC打开文件进行准备表单 (3).配置好对应字段的表单域 (4).传入数据进行打印 2).动态数据是数据不

weixin_55631086的博客 2575

感应加热电源设计避坑指南:半桥LC串联谐振的5个关键问题

本文深入解析半桥LC串联谐振在感应加热电源设计中的5个关键问题,包括均压电阻选型、功率管驱动时序、谐振频率补偿等实战经验。通过真实故障案例和解决方案,帮助工程师避开常见设计陷阱,提升电路稳定性和效率,特别适合从事桥感应加热电源开发的工程师参考。

weixin_27013291的博客 510

itext生成pdf间距_iText入门

先简单介绍一下IText iText是一种生成PDF报表的Java组件。通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题。IText生成PDF报表的方式用Itext自己布局加元素生成pdf //itext-PdfStamper pdfStamper(俗称抠模板)读取pdf模板进行填充...

weixin_39895684的博客 938

ESP32系列之LVGL(三):Gui-Guider的使用

Gui-Guider的使用

m0_55986987的博客 2万+

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

王老师青少年编程 3399

itext 根据模板 生成pdf 多行数据

前言:基于 html + ccs + itext + 字符串替换完成的。简单,依赖的 jar 少... 根据 pdf模板 生成 pdf , 1. 不能有循环的数据(可能有,但我并没有找到); 2. table 中的文字无法自适应(可能有,但我并没有找到)。 废话完毕了, 先看预览效果吧。 红框中的内容,就是 list 数据,长度不固定,无法用 PDF 模板生成。 下面是代码: pom.xml文件 <!--iTextpdf 相关依赖 --> <depen

Pd_1503 3374

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

9794

Itext导出pdf教程

使用itext生成pdf文件,通过模版和程序相结合的方式控制文件格式。文件中固定的部分可以用模版控制格式 省时又省力,需要动态变化的部分通过程序控制其格式 灵活可控。 1、先用word做出固定模板并且另存为pdf格式 2、用Adobe Acrobat创建表单域 支持在程序里动态赋值。(注意下面的额else域就是我们为程序控制文件留的一个窗口) 到此位置模板就算是完成了,直接在项目里找...

qq_39731741的博客 1199

手把手教你学simulink(26.8)--控制算法场景示例:基于强化学习的无人机姿态稳定控制系统

首先,我们需要定义无人机的姿态稳定控制环境。环境包括无人机的状态(姿态角、角速度等)和动作(电机转速)。我们还需要定义奖励函数,用于评估控制器的表现。matlab深色版本% 定义环境% 定义状态空间% 12个状态变量% 定义动作空间% 电机转速范围奖励函数用于评估控制器的表现。我们可以根据无人机的姿态误差、角速度误差以及控制输入的变化率来设计奖励函数。具体来说,当无人机的姿态接近设定值时,给予正奖励;当姿态误差较大或控制输入变化剧烈时,给予负奖励。matlab深色版本。

MHD0815的博客 496

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java 根据模板导出PDF

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

qq_38998209的博客 2255

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: Java 发送post请求
下一篇: Java pdf转成图片
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值