博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java向PDF模板写入数据
阅读量:6384 次
发布时间:2019-06-23

本文共 2996 字,大约阅读时间需要 9 分钟。

hot3.png

项目需要生成PDF文件,在浏览器实现打印功能。这里只说明如何利用PDF文件模板写入数据

整个写入过程我分11步演示,演示过程中的PDF文件我打了马赛克(显示的PDF是公司项目文件),但不影响演示过程。

首先安装Adobe Acrobat DC。下载地址:https://pan.baidu.com/s/1BxjHtK5zAWBBsrOGZbEtdw

1.安装过程一路下一步,可以选择使用30天。安装完成,打开如下图:

2.我的Demo项目为Maven构建,需要依赖如下两个包:

com.itextpdf
itextpdf
5.5.5
com.itextpdf
itext-asian
5.2.0

3.准备PDF文件模板(你可以把自己创建一个只有表头没有内容的Excel文档来或者一个需要填写内容的Word文档来测试,把文档另存为,保存格式为PDF)

4.使用Acrobat DC打开保存的PDF文件,以下没有打码的下划线和冒号后面是我要用Java代码填写的内容。

5.窗口右侧下面有一个准备表单选项,点击之后界面如下:

6.点击开始按钮之后如下:

7.首先删除Acrobat DC自动生成的所有的fill控件(单机选中,按delete键删除),因为我发现使用fill控件,Java代码未能成功向模板文件中写入数据。删除之后,在顶部菜单有一个“添加文本域”的控件,点击一下,然后可以拖动控件到下划线上或者冒号后面。可以拖动设置控件大小,双击控件会打开一个对话框,在里面有个名称文本框,可以自定义控件名。如下图:

8.所有控件名称可以自定义,也可以使用默认名称(默认名称:Text+N)需要写入内容的地方都放好文本控件后点击左上角文件,另存为,保存到自己需要的目录。

9.Maven引入依赖后,创建测试类。完整代码如下:

package com.aijiao.demo.pdf;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.pdf.*;import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.HashMap;import java.util.Map;/** * @author aijiao * @date 2018/08/01 */public class PdfDemo {    public static void fillTemplate() {        // 模板路径        String templatePath = "E:\\工作\\模板\\模板.pdf";        // 生成的新文件路径        String newPDFPath = "E:\\工作\\模板\\测试.pdf";        PdfReader reader;        FileOutputStream out;        ByteArrayOutputStream bos;        PdfStamper stamper;        try {            out = new FileOutputStream(newPDFPath);            reader = new PdfReader(templatePath);            bos = new ByteArrayOutputStream();            stamper = new PdfStamper(reader, bos);            AcroFields form = stamper.getAcroFields();            Map
map = new HashMap<>(); map.put("test1", "中国工商银行"); map.put("test2", "中国农业银行"); map.put("test3", "中国建设银行"); int i = 0; java.util.Iterator
it = form.getFields().keySet().iterator(); while (it.hasNext()) { String name = it.next(); form.setField(name, map.get(name)); } //true代表生成的PDF文件不可编辑 stamper.setFormFlattening(true); stamper.close(); Document doc = new Document(); PdfCopy copy = new PdfCopy(doc, out); doc.open(); PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); copy.addPage(importPage); doc.close(); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } } public static void main(String[] args) { fillTemplate(); }}

10.运行main方法,在输出下生产“测试.PDF”文件(我代码中的路径是我的桌面路径)其中的“测试.PDF”文件内容如下:

11.可以看到,我在代码中写入的数据已经成功生成到新的PDF文件中了。

转载于:https://my.oschina.net/aijiaoer0624/blog/1921113

你可能感兴趣的文章
Web前端开发规范文档
查看>>
安装win2008r2、域控、IIS、证书服务器、部署exchange2010
查看>>
centos6.2安装tomcat
查看>>
利用ansible实现一键化部署 rsync服务
查看>>
nginx根据条件跳转+跳转规则
查看>>
(转载)Javascript异步编程的4种方法
查看>>
ACM suvey
查看>>
Oracle的case 用法
查看>>
Python之路【第二十七篇】:反射
查看>>
敌兵布阵
查看>>
Web.config详解 [转]
查看>>
PHP杂记
查看>>
面试题整理10
查看>>
POP跳转页面,从3号跳回1号,
查看>>
[Android] keytools生成jsk文件以及获取sha1码
查看>>
一道算法题
查看>>
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
查看>>
WM-结汇
查看>>
概述--Nginx集成Vcenter 6.X HTML Console系列之 1--(共4)
查看>>
mysql查询重复
查看>>