java 根据pdf模板生成文件,插入文字、选项、签名、公章(详细步骤和代码)

小七蒙恩 2024-09-09 08:05:05 阅读 80

java 根据pdf模板生成文件,插入文字、选项、签名、公章(详细步骤和代码)

成果使用word,制作一个模板。使用pdf编辑器,生成pdf模板。1.从做好的word导入来创建pdf2.插入文字域3.插入选项域4.插入图片域,预插入签名和公章5.模板做好了,我们进行保存。

java 实现引入依赖代码实现

执行测试

成果

在这里插入图片描述

使用word,制作一个模板。

在这里插入图片描述

使用pdf编辑器,生成pdf模板。

我这里使用福昕pdf编辑器,其他pdf编辑器(如Adobe Acrobat)也可以用但是大多要钱。

1.从做好的word导入来创建pdf

在这里插入图片描述

在这里插入图片描述

2.插入文字域

在这里插入图片描述

右键文字域,填入字段与属性

在这里插入图片描述

3.插入选项域

在这里插入图片描述

在这里插入图片描述

导出值不要忘记填写,与代码对应上。

在这里插入图片描述

4.插入图片域,预插入签名和公章

在这里插入图片描述

注意:外观这里的边框和填充都选无色,否则图片会被填充色盖住;

在这里插入图片描述

注意:选项这里我们选择只显示标签。

在这里插入图片描述

5.模板做好了,我们进行保存。

在这里插入图片描述

java 实现

引入依赖

<code><!-- pdf -->

<dependency>

<groupId>com.itextpdf</groupId>

<artifactId>itextpdf</artifactId>

<version>5.5.13.2</version>

</dependency>

<!--中文字体-->

<dependency>

<groupId>com.itextpdf</groupId>

<artifactId>itext-asian</artifactId>

<version>5.2.0</version>

</dependency>

<!--html xml 转为pdf-->

<dependency>

<groupId>com.itextpdf.tool</groupId>

<artifactId>xmlworker</artifactId>

<version>5.5.11</version>

</dependency>

代码实现

package com.tencent.qcloud.roomservice.webrtc.utils;

import com.alibaba.fastjson.JSONObject;

import com.itextpdf.text.Image;

import com.itextpdf.text.Rectangle;

import com.itextpdf.text.pdf.*;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.util.Map;

/**

* @author dume

* @ClassName PdfTest

* @description: pdf模板操作

* @date 2024年07月26日

* @version: 1.0

*/

public class PdfTest {

public static void main(String[] args) {

//测试执行

FillTemplate(

"C:\\test\\申请表.pdf",

"C:\\test\\新申请表.pdf",

"杜小七",

"辽宁大连",

"跑步",

"Yes",

"Yes",

"Yes",

"C:\\test\\电子签名.png",

"C:\\test\\公章.png"

);

}

/**

* 根据模板生成pdf

* @param sourcesPath 原文件路径

* @param targetPath 生成文件路径

* @param name 参数

* @param address 参数

* @param hobby 参数

* @param select_1 选项

* @param select_2 选项

* @param select_3 选项

* @param signPath 签名图片路径

* @param gongzhangPath 公章图片路径

*/

public static void FillTemplate(

String sourcesPath,

String targetPath,

String name,

String address,

String hobby,

String select_1,

String select_2,

String select_3,

String signPath,

String gongzhangPath

){

//设置参数

JSONObject jsonObject = new JSONObject();

jsonObject.put("name",name);

jsonObject.put("address",address);

jsonObject.put("hobby",hobby);

jsonObject.put("select_1",select_1);

jsonObject.put("select_2",select_2);

jsonObject.put("select_3",select_3);

// 填充创建pdf

PdfReader reader = null;

PdfStamper stamp = null;

ByteArrayOutputStream baos =null;

try {

reader = new PdfReader( sourcesPath);

File deskFile = new File(targetPath);

stamp = new PdfStamper(reader, new FileOutputStream(deskFile));

// 取出报表模板中的所有字段

AcroFields form = stamp.getAcroFields();

System.out.println(form.getFields().keySet());

//设置宋体

BaseFont song =BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

if (jsonObject != null) {

for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {

String key = entry.getKey();

String value = entry.getValue().toString();

//保存选项

if (key.startsWith("select")) {

form.setField(key, value, true);

//保存文字

}else {

form.setFieldProperty(key, "textfont", song, null);

form.setField(key, value);

}

}

}

//插入签名

insertImage(form,stamp,"sign",signPath);

//插入公章

insertImage(form,stamp,"gongzhang",gongzhangPath);

//保存修改

stamp.setFormFlattening(true);

}catch (Exception e){

e.printStackTrace();

}finally {

if (stamp != null) {

try{

stamp.close();

}catch (Exception e){

e.printStackTrace();

}

}

if (reader != null) {

try{

reader.close();

}catch (Exception e){

e.printStackTrace();

}

}

if (baos != null) {

try{

baos.close();

}catch (Exception e){

e.printStackTrace();

}

}

}

}

/**

* pdf模板插入图片

* @param form

* @param stamper

* @param filedName

* @param url

* @return

*/

public static boolean insertImage(AcroFields form, PdfStamper stamper, String filedName, String url) {

try {

int pageNo = form.getFieldPositions(filedName).get(0).page;

Rectangle signRect = form.getFieldPositions(filedName).get(0).position;

float x = signRect.getLeft();

float y = signRect.getBottom();

Image image = Image.getInstance(url);

// 获取操作的页面

PdfContentByte under = stamper.getOverContent(pageNo);

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

image.scaleToFit(signRect.getWidth(), signRect.getHeight());

// 添加图片

image.setAbsolutePosition(x, y);

under.addImage(image);

}catch (Exception e){

return false;

}

return true;

}

}

执行测试

在这里插入图片描述

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。