专栏名称: Linux就该这么学
专注于Linux运维技术培训,让您学习的每节课都有所收获,订阅本号后可每天获得最新Linux运维行业资讯、最实用的Linux免费教程以及独家Linux考证资料,三十多万技术小伙伴的选择,Linux就该这么学!
目录
相关文章推荐
Linux就该这么学  ·  为什么说程序员是一个极度劳累的工作? ·  昨天  
Linux就该这么学  ·  上海一美妆公司激进“裁员计划”曝光:只留能用 ... ·  2 天前  
Linux就该这么学  ·  详解 Java 操作 ... ·  2 天前  
Linux就该这么学  ·  OpenAI 放大招:宣布免费开放 ... ·  3 天前  
51好读  ›  专栏  ›  Linux就该这么学

详解 Java 操作 PDF:一键生成文件,插入文字、选项、签名及公章

Linux就该这么学  · 公众号  · linux  · 2025-02-09 08:02

正文

作者:小七蒙恩 来源:https://blog.csdn.net/qq_38105536

成果

使用word,制作一个模板

图片

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

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

1.从做好的word导入来创建pdf
图片
图片
2.插入文字域
图片

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

图片
3.插入选项域
图片

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

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

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

图片

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

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

java 实现

引入依赖

<dependency>
 <groupId>com.itextpdfgroupId>
 <artifactId>itextpdfartifactId>
 <version>5.5.13.2version>
dependency>

<dependency>
 <groupId>com.itextpdfgroupId>
 <artifactId>itext-asianartifactId>
 <version>5.2.0version>
dependency>

<dependency>
 <groupId>com.itextpdf.toolgroupId>
 <artifactId>xmlworkerartifactId>
 <version>5.5.11version>
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 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);
                    }
                }
            }

            //插入签名






请到「今天看啥」查看全文