文档章节

JAVA在PDF指定位置赋值

郏高阳
 郏高阳
发布于 2012/08/20 17:32
字数 437
阅读 2634
收藏 5

大家肯定做过  根据一个模版往里面填值然后生成新的PDF打印的工作,还不会的同志们注意啦!

首先用world画好模版,给需要填值的地方留下空间,另存为:pdf……现在这种PDF存值是不行的!你还需要一个工具:Adobe LiveCycle Designer ES2  

如下图:打开你生成的pdf模版


大家可以看到右上角是一些组件,有:TextField,CheckBox……等,你懂得!直接托到你指定的位置就可以啦!

然后用JAVA程序读取,赋值,生成新的有值的PDF就ok了

还需要一个jar包:itext-2.0.3.jar   网上一大把

个人封装了一个类,使得非常简单了,代码如下:

package com.sun;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.PdfCopy;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;

public class PdfTemplate {
	/**
	 * 赋值并生成新的PDF文档
	 * @param templatePDF    pdf模版
	 * @param outFile    输出的PDF Name
	 * @param hashMap    templatePDF对应的数据
	 * @author  JIA-G-Y 
	 *  二〇一二年八月二十日 17:20:36
	 */ 
	public static void doSomeThing(String templatePDF,String outFile,HashMap<String,String> hashMap){
		try {
			FileOutputStream fos = new FileOutputStream(outFile);
			PdfReader reader = new PdfReader(templatePDF);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			PdfStamper stamp = new PdfStamper(reader,baos);
			AcroFields form = stamp.getAcroFields();
			form=setField(form,hashMap);
			stamp.setFormFlattening(true);
			stamp.close();
			Document doc = new Document();
			PdfCopy pdfCopy = new PdfCopy(doc, fos);
			doc.open();
			PdfImportedPage impPage = pdfCopy.getImportedPage(new PdfReader(baos.toByteArray()), 1);
			pdfCopy.addPage(impPage);
			doc.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		
	}
	@SuppressWarnings({ "unchecked", "unchecked" })
	public static  AcroFields setField(AcroFields form,HashMap<String,String> fieldMap) {
		Set it=fieldMap.keySet();
		Iterator itr=it.iterator();
		while(itr.hasNext()){
			try {
				Object temp = itr.next();
				form.setField(temp.toString(), fieldMap.get(temp.toString()));
			} catch (IOException e) {
				e.printStackTrace();
			} catch (DocumentException e) {
				e.printStackTrace();
			}
		}
		return form;
	}
}

测试:

package com.sun;

import java.util.HashMap;

public class Test {
	public static void main(String[] args) {
		HashMap<String, String> hashMap = new HashMap<String, String>();
		hashMap.put("Code", "JIA-G-Y  2012-08-20");

		hashMap.put("Tel", "400-8888888");
		hashMap.put("Address", "1859101");
		hashMap.put("GM", "2");
		PdfTemplate.doSomeThing(".\\SUN.pdf","NewsPDF"+".pdf", hashMap);
	}
}

模版:


结果:



© 著作权归作者所有

共有 人打赏支持
郏高阳

郏高阳

粉丝 100
博文 153
码字总数 112268
作品 1
黄浦
程序员
私信 提问
加载中

评论(3)

郏高阳
郏高阳

引用来自“it_hand”的评论

亲,可以问你个问题不? 例如我编号替换为: 赵江波 为什么只显示 江波 赵不见了~1
长度类型你看下,我倒是没有遇到这个问题
i
it_hand
亲,可以问你个问题不? 例如我编号替换为: 赵江波 为什么只显示 江波 赵不见了~1
jdk2010
jdk2010
你这东西收费啊
itext5根据模板生成pdf,能否自适应调整字体大小

java用使用itext5,根据模板生成pdf时,在pdf指定位置赋值以后,部分文字显示不出来,被遮挡住了。主要是cell中增加 因为模板是html格式的,所以,width和height都是固定的,是否有根据文本内...

anywayzhj
2018/09/24
510
1
System.arraycopy为什么快

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangyangzhizhou/article/details/79504818 前言 在 Java 编程中经常会遇到数组拷贝操作,一般会有如下四种方...

超人汪小建(seaboat)
2018/03/10
0
0
Aspose.Cells for Java 8.1.0 发布

Aspose.Cells for Java 8.1.0 发布,此版本更新内容如下: 允许 Java 开发者在渲染电子表格的时候限制 API,只能使用一个字体位置 当保存一个工作表为 HTML 时支持导出或者禁止导出隐藏的工作...

oschina
2014/06/15
470
0
Java 库:为 Java 程序员而生的 10 + 最佳库

众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库。利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升。 举些例子,最常用的官方库有 ja...

noeticforce
2017/06/29
10.1K
15
Scala学习(二)控制结构和函数

1.条件表达式 Scala的if/else语法结构和Java一样。不过,在Scala中if/else表达式有值,这个值就是跟在if或else之后的表达式的值。例如: 或者将表达式的值赋值给变量: 这与如下语句的效果一...

我爱春天的毛毛雨
2018/09/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

当心Python函数可变默认参数(list,set,dict…)的陷阱

绝大多数情况下,Python是一个干净具有一致性的语言。然而,有些少数情况会让初学者感到困惑。其中有些情况是有意识的但会成为潜在的莫名其妙,而有些可以说是语言赘肉。下面我们看看使用可变...

呆木木人儿
5分钟前
0
0
Centos7安装Docker镜像仓库Harbor1.5.3

Harbor 详细介绍 Harbor安装指南 Harbor官网配置CA认证 Kubernetes Harbor安装教程 1、容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的 Registry 是...

谢思华
12分钟前
1
0
mysql保存23:59:59时,自动加一秒

今天遇到一个问题,发现mysql保存2018-08-22 23:59:59的时间时会自动加一秒,存到库中就变成了2018-08-23 00:00:00,经查阅资料发现是因为MySQL数据库对于毫秒大于500的数据进行进位,更...

xiaomin0322
12分钟前
0
0
Redis集群-哨兵机制

redis并没有提供自动master选举功能, 而是需要借助一个哨兵来进行监控 哨兵的作用就是监控Redis系统的运行状况, 它的功能包括两个 监控master和slave是否正常运行 master出现故障时自动将s...

Java搬砖工程师
16分钟前
0
0
我见很多赚大钱的人,但没有一个是靠努力成功的!(强烈推荐)

这些年,在我见过的能够赚大钱的人里,没有一个不是靠运气的。 这很残忍,但是事实。 因为在一个高速发展的时代里,一个人要想成功,”机遇“远比”能力“重要。 只有当社会稳定下来的时候,...

柴高八斗之父
20分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部