Java实现PDF模板套打(证书)

套打之前需要先利用Adobe Acrobat Pro DC先做出要打印证书的模板,举例如下图,为对应的文本框赋予名称(ID),后续可在Java程序中根据ID给对应的文本框赋值(模板可存在Img头像,本文忽略)。模板制作完毕后,将xxx.pdf文件拷贝至项目路径下。项目需引用itextpdf-5.5.5.jar处理pdf

套打方法类中加载此pdf模板文件:

URL templateFile = this.getClass().getResource("/pdftemplate/xxx.pdf");

根据具体业务获取套打的数据,并写入对应的Map中,Map的key即为pdf中的文本ID

Map<Object, Object> datamap = new HashMap<Object, Object>();
datamap.put("KS_XM", your data);
datamap.put("XB_MC", your data);
datamap.put("KS_SFZ", your data);

 然后交由套打公共类处理,处理完毕浏览器下载。

OutputStream os = response.getOutputStream();
FileInputStream inputStream = null;
inputStream = new FileInputStream(templateFile.getFile());
boolean result = createPdfFromTemplateMy(inputStream, os,datamap);
inputStream.close();
os.close();

套打公共类源码如下:

private Boolean createPdfFromTemplateMy(InputStream templateFile, OutputStream targetFile, Map<Object, Object> fieldMap){
		Boolean retValue = false;
		PdfReader reader = null;
		PdfWriter writer = null;
		try {
			/* 打开已经定义好字段以后的pdf模板 */
			reader = new PdfReader(templateFile);
			writer = new PdfWriter(targetFile);
			PdfFont font = PdfFontFactory.createFont(PdfUtil.FONT_FANGSONG_URL, PdfEncodings.IDENTITY_H, true);
			PdfDocument pdfDocument = new PdfDocument(reader, writer);// 创建pdfDocument的对象与Writer的对象关联
			PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDocument, true);
			Map<String, PdfFormField> formFields = form.getFormFields();
			for (Object key : fieldMap.keySet()) {
				String value = (checkStr(fieldMap.get(key))).trim();
				PdfFormField field = formFields.get(key);
				if (field == null)
					continue;
				if (field instanceof PdfTextFormField) {
					field.setFont(font);		
				}
				field.setValue(value);
			}
			form.flattenFields();
			pdfDocument.close();
			retValue = true;
		} catch (IOException ioe) {
			System.err.println(ioe.getMessage());
		} finally {
			try {
				reader.close();
				writer.close();
			} catch (Exception e) {
			}
		}
		return retValue;
	}

 

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PDF模板导出可以使用Java的iText库来实现。iText是一个开源的Java库,可以用来创建、编辑和操作PDF文档。下面是一个简单的示例代码,演示了如何使用iText来导出PDF模板: ``` import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; import java.io.FileOutputStream; import java.io.IOException; public class PdfTemplateExporter { public static void main(String[] args) throws IOException, DocumentException { // 读取PDF模板文件 PdfReader reader = new PdfReader("template.pdf"); // 创建输出文件 FileOutputStream out = new FileOutputStream("output.pdf"); // 创建PDF文档对象 Document document = new Document(); // 创建PDF输出流 PdfStamper stamper = new PdfStamper(reader, out); // 获取PDF文档的页面数 int pages = reader.getNumberOfPages(); // 遍历所有页面 for (int i = 1; i <= pages; i++) { // 获取当前页面的可编辑区域 Rectangle rect = reader.getCropBox(i); // 在可编辑区域内添加内容(这里可以添加表格、文本、图片等) // ... // 更新页面内容 stamper.getOverContent(i).setLiteral("Q\nq\n"); // 释放资源 stamper.close(); } // 关闭PDF输出流 out.close(); } } ``` 在这个示例中,我们首先读取了一个名为“template.pdf”的PDF模板文件。然后,我们创建了一个名为“output.pdf”的输出文件,并创建了一个PDF文档对象和一个PDF输出流。接下来,我们遍历了所有页面,获取了每个页面的可编辑区域,并在可编辑区域内添加了一些内容。最后,我们更新了页面内容,关闭了PDF输出流。 当你运行这个示例代码时,它将从“template.pdf”文件中读取PDF模板,并在每个页面上添加一些内容。然后,它将生成一个名为“output.pdf”的新PDF文件,其中包含了我们添加的内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值