java pdf 模板_java通过PDF模板填写PDF表单

这篇博客展示了如何使用Java的iText库基于模板填写PDF表单,包括设置中文字体、填充字段和插入图片。提供了详细的代码示例,演示了创建PDF文件的过程,并提到了Adobe Acrobat作为编辑PDF的工具。
摘要由CSDN通过智能技术生成

本文实例为大家分享了java通过pdf模板填写pdf表单的具体代码,包括图片,供大家参考,具体内容如下

需要用到的java包:

itext.jar、itextasian.jar的jar包。这个包里面定义了与中文输出相关的一些文件。

编写的表单如下:

59af9754e20c7daa6401765fe17766d1.png

import java.io.bytearrayoutputstream;

import java.io.fileoutputstream;

import java.io.ioexception;

import java.util.hashmap;

import java.util.map;

import com.itextpdf.text.documentexception;

import com.itextpdf.text.image;

import com.itextpdf.text.rectangle;

import com.itextpdf.text.pdf.acrofields;

import com.itextpdf.text.pdf.basefont;

import com.itextpdf.text.pdf.pdfcontentbyte;

import com.itextpdf.text.pdf.pdfreader;

import com.itextpdf.text.pdf.pdfstamper;

/**

* pdf工具类

* @author moshunwei

* @since 2018-02-01

*/

public class pdfutil {

/**

* 根据模板生成pdf

* @param data map(string,object)

* @return

*/

public static boolean createpdf(string path,map data) {

pdfreader reader = null;

acrofields s = null;

pdfstamper ps = null;

bytearrayoutputstream bos = null;

try {

reader = new pdfreader("d:\\test.pdf");

bos = new bytearrayoutputstream();

ps = new pdfstamper(reader, bos);

s = ps.getacrofields();

/**

* 使用中文字体 使用 acrofields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体 adobe 宋体 std l

*/

basefont bfchinese = basefont.createfont("stsongstd-light", "unigb-ucs2-h", false);

/**

* 设置编码格式

*/

s.addsubstitutionfont(bfchinese);

// 遍历data 给pdf表单表格赋值

for (string key : data.keyset()) {

s.setfield(key,data.get(key).tostring());

}

// 如果为false那么生成的pdf文件还能编辑,一定要设为true

ps.setformflattening(true);

/**

* 添加图片

*/

string imgpath="d:/n5.jpg";

int pageno = s.getfieldpositions("img").get(0).page;

rectangle signrect = s.getfieldpositions("img").get(0).position;

float x = signrect.getleft();

float y = signrect.getbottom();

// 读图片

image image = image.getinstance(imgpath);

// 获取操作的页面

pdfcontentbyte under = ps.getovercontent(pageno);

// 根据域的大小缩放图片

image.scaletofit(signrect.getwidth(), signrect.getheight());

// 添加图片

image.setabsoluteposition(x, y);

under.addimage(image);

@suppresswarnings("resource")

fileoutputstream fos = new fileoutputstream("d:\\shouju_fb.pdf");

fos.write(bos.tobytearray());

return true;

} catch (ioexception | documentexception e) {

system.out.println("读取文件异常");

e.printstacktrace();

return false;

}finally {

try {

bos.close();

ps.close();

reader.close();

} catch (ioexception | documentexception e) {

system.out.println("关闭流异常");

e.printstacktrace();

}

}

}

public static void main(string[] args) {

map data = new hashmap();

data.put("id", "12312321");

data.put("name", "小帅哥");

data.put("sex", "男");

data.put("age", "21");

pdfutil.createpdf("d:/n5.jpg",data);

}

}

还有相应的编辑pdf表单的工具,默认用adobe acrobat。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值