使用工具对pdf表单域编辑

一、问题

实现线下电子签章功能,每经过一次签证,都需要保留签证 的pdf文件(带有实际电子签章), 点击电子签章有相关签章信息

难点:需要pdf文件,根据表单域进行k-v填充

二、生成pdf文件模板

需要生成pdf文件模板工具adobe_Acrobat_DC 

链接:https://pan.baidu.com/s/1Z4wH5ObfaTGFkPS7HpI7yw 
提取码:eg21 

 安装包是把注册破解都涵盖了,不需要手动破解,进行安装-------------------------------------

双击Setup.exe后可以默认安装(或者自定义安装,主要是改掉安装路径)

安装完软件后进行模板的制作,先用word制作出模板,留好空位,然后word转pdf文件

后用上面安装的pdf编辑工具打开pdf文件

打开pdf模板后,选择工具--》表单和签名--》准备表单

双击表单域。或者在右侧对表单域名称进行更改,这个是对pdf文件编辑的关键点,会根据这个名称进行填充

可以右键表单域--》属性进行一些属性更改

三、代码填充pdf文件

模板生成后通过代码进行编辑

 public static void interviewReportPDF(Map<String, String> map) {



            // 模板路径
            String templatePath = "E:/1001-4.pdf";
            // 新文件路径
            String newPDFPath ="E:/new.pdf";
            PdfReader reader;
            FileOutputStream out;
            ByteArrayOutputStream bos;
            PdfStamper stamper;
            try {
                out = new FileOutputStream(newPDFPath);// 输出流
                reader = new PdfReader(templatePath);// 读取pdf模板
                bos = new ByteArrayOutputStream();
                stamper = new PdfStamper(reader, bos);
                AcroFields form = stamper.getAcroFields();

                // 给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示
                BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();
                fontList.add(bf);
                form.setSubstitutionFonts(fontList);

                //遍历map装入数据
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    form.setField(entry.getKey(), entry.getValue());
                    //System.out.println("PDF---->  key= " + entry.getKey() + " and value= " + entry.getValue());
                }

                stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
                stamper.close();

                Document doc = new Document();
                PdfCopy copy = new PdfCopy(doc, out);
                doc.open();
                PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
                copy.addPage(importPage);
                doc.close();

            } catch (IOException e) {
                e.printStackTrace();
            } catch (DocumentException e) {
                e.printStackTrace();
            }

        }

        //main方法测试
        public static void main(String[] args) {
            Map<String,String> map=new HashMap<>();
            map.put("sectionName", "胡");
            map.put("sectionCode", "22");
            map.put("departName", "jn");
            map.put("sign", "张三");
            System.out.println(map);
            interviewReportPDF(map);

        }

生成文件 效果

要对表单域的范围,属性要次尝试才能和文件内容融合的好,不然会出现填充内容显示不全(是因为表单域太小),字体大(表单域文字大小不适合)等问题 

Word是文字处理软件,我们在日常处理一些文字时经常遇到一些问题,如:各种公式的录入,尽管Word都提供了“公式编辑器”,但其插入的却是“对象”,有时排版会感觉不方便,而且也不适合大量、重复的公式录入。根据经验,只要在Word中善于使用”,并结合Windows的“剪贴板”,就能快速、方便、简捷地录入各种公式。 要使用,我们必须知道什么是是一种特殊代码,用来指导WORD在文档中自动插入文字、图形、页码和其他资料。我们在日常文字处理中经常遇到一些简单,只是没有引起我们的注意,相当于文档中可能发生变化的数据或邮件合并文档中套用信函、标签中的占位符。 有三种类型:结果、行为和标记。结果是以插入信息的方法在文档中产生结果;行为是对文档做一些操作但不插入可见的文本;标记既不产生结果也不发生行为。 的组成:结果通常是由代码结果组成。 如:{includetext ―C:\\ls\zhls1123.doc‖},includetext是类型,“C:\\ls\zh123.doc”是指令。它表示在文档中每个出现此代码的地方就会插入名为“zh123.doc‖的文档。结果是当Word执行的指令时在文档中生成具体的文本、数字、图形。 最大的特点就是内容可以根据文档的改动或其他有关因素的变化而自动更新。Word提供了9大类共74种,其中IF有两处、Compare有两处,均在“文档自动化”和“邮件合并”中。好了我们下面开始学习有关的
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值