开发者

java实现根据pdf模板生成文件并插入文字,选项,签名和公章

目录
  • 成果
  • 使用word,制作一个模板
  • 使用pdf编辑器,生成pdf模板
    • 1.从做好的word导入来创建pdf
    • 2.插入文字域
    • 3.插入选项域
    • 4.插入图片域,预插入签名和公章
    • 5.模板做好了,我们进行保存
  • Java 实现
    • 引入依赖
    • 代码实现
  • 执行测试

    成果

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

    使用word,制作一个模板

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

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

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

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

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

    2.插入文字域

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

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

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

    3.插入选项域

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

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

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

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

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

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

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

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

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

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

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

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

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

    java 实现

    引入依赖

    		<!-- 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 原文件路径
         * @pajsram 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,
               javascript 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);
            http://www.devze.com    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);
                        //保存文php字
                        }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;
                jsRectangle 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;
        }
    }
    

    执行测试

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

    java实现根据pdf模板生成文件并插入文字,选项,签名和公章

    以上就是java实现根据pdf模板生成文件并插入文字,选项,签名和公章的详细内容,更多关于java pdf模板生成文件的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜