Adobe Acrobat pro生成PDF模版

最近做了一个关于动态生成PDF合同的需求  java生成PDF 网络上随便一搜遍有了

不要用手动在代码里面输入合同中的文字这种方式 如这样的方式 http://blog.csdn.net/justinytsoft/article/details/53320225

需求的多变,那天需要修改一下字体的颜色,或者字体, 增加一行字,等等其他奇葩要求,上面这个博客的方式都得修改代码

使用itext使用pdf模版的方式,就不需要修改代码了.

这里用的是itext生成PDF

maven依赖

<dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itextpdf</artifactId>
   <version>5.5.6</version>
</dependency>
<dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itext-asian</artifactId>
   <version>5.2.0</version>
</dependency>

参考以下博客 ,但是该中还是有一些问题,PDF模版
http://blog.csdn.net/top__one/article/details/65442390

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
以下都是踩过的坑,希望能帮助后来的人
原始pdf
word模版转PDF后 导入Adobe Acrobat pro    如果pdf中 甲方:_______    姓名:_____   之类的下划线,,他会自动生成表单
导入之后

上图中的黑框  就是表单了  双击

重点关注表单中的名称  这个就是以后再代码分钟动态填充的

坑来了

这里可以看到表单的字体和大小 

实际上自动生成的表单,  我们在往里面填充内容的时候会有问题的.

如果需要填充的内容包含中文 一点要删掉默认生成的表单域  然后重新添加  注意字体

小塚明朝Pr6N字体(Kozuka Mincho Pr6N R)

填充汉字的时候有些汉字会显示不出来   比如  军 ,资  ,肯定还有很多字不能显示出来

第一感觉就是更换字体  然后换成微软雅黑

好吧,.现在汉字都显示不出来了,只显示数字

试了很多字体.都不行

最后,删除了自动生成的表单.手动往需要  动态添加内容的地方 添加表单域

实际测试  这种方法可行

 itext 代码案例    

//PdfTemplate类里面定义了所有表单域的名称 这里只举例子了两个表单域//上面提到了表单域的名称

public static void fillTemplate(PdfTemplate pdfTemplate)  throws BusinessException{
        // 模板路径
        String templatePath = "/pdf/xxxx.pdf";
        // 填充模版文件后生成的待签署的合同路径

        //TODO 地址
        // 文件名BORROWPROTOCOL+协议编号  
        String newPDFPath = TEMP_PDF_LOCATION+pdfTemplate.getContract_no()+EXPANDEDNAME;
        PdfReader reader;
        FileOutputStream out;
        ByteArrayOutputStream bos;
        PdfStamper stamper;

        try {
            out = new FileOutputStream(newPDFPath);
            // 读取pdf模板
            reader = new PdfReader(templatePath);
            bos = new ByteArrayOutputStream();
            stamper = new PdfStamper(reader, bos);
            AcroFields form = stamper.getAcroFields();

            //往pdf合同模版里面设置值  //mock
            //合同编号
            form.setField("contract_no", pdfTemplate.getContract_no());
            //甲方
            form.setField("first_user_name", pdfTemplate.getFirst_user_name());
            //...需要填充的其他表单域
            

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

            doc.open();
            //pdf模版的页数
            int pagecount= reader.getNumberOfPages();
            for(int i=1 ;i<pagecount+1;i++){
                PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i);
                copy.addPage(importPage);
            }
            doc.close();

        } catch (IOException e) {
            throw new BusinessException("生成合同模版失败,合同编号:"+pdfTemplate.getContract_no());
        } catch (DocumentException e) {
            throw new BusinessException("生成合同模版失败,合同编号:"+pdfTemplate.getContract_no());
        }

    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小白课代表

给你的Windows加一个 「文件快速预览」功能

在macOS中,有一个非常好用的功能叫做Quick Look,当你在Finder想要查看一个文件时,不需要打开,只需要选中以后按空格即可预览大部分常见文件,Wi...

974
来自专栏Python中文社区

PyQt5 GUI应用程序工具包入门(2)

下面我们从一个简单的登录对话框来了解PyQt5的开发过程。 PyQt5支持两种界面开发方式:一种是在QtDesigner中设计界面,各种控件直接通过拖动添加;...

3299
来自专栏CodingBlock

Eclipse的快捷键及常用设置

本篇文章转自:eclipse快捷键及各种设置 1、提示键配置 一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Vis...

2565
来自专栏Android先生

Android 9.0适配及部分新特性介绍

在最开始针对速贷进行Android9.0版本的适配时,我使用的是真机是vivo X21A,将targetSdkVersion升到28,运行发现网络请求全报400...

1.2K4
来自专栏進无尽的文章

扒虫篇-Bug日志 Ⅱ

事情是这样的:一个风和日丽的下午,我正在 itunesConnect 中注册一个APP,基本信息都保存了,在编辑版本信息时,都弄的差不多了,可是没有保存,结果不...

741
来自专栏熊二哥

Sublime快速入门

在当前的互联网时代,任何程序语言和相关技术都只是实现互联网应用的一种手段,这也就造成了大量的互联网工程师长期与不同的语言、技术、系统环境、IDE等打交道。因此一...

1975
来自专栏小狼的世界

Mac下快捷键的收集整理

最近刚换用了Mac的笔记本,因为之前是Linux用户,感觉切换的过程非常平滑,但是难免有些小不适应,在使用过程中,遇到一些快捷键,收集了下来,与大家分享。

1305
来自专栏技术之路

Qt5 新特性

Qt 5 已经临近发布,其最大的特点就是模块化。将原来庞大的模块更细分为不同的部分,同时,一个大版本的升级,当然少不了添加、删除各个功能类。文本简单介绍 Qt5...

3678
来自专栏施炯的IoT开发专栏

《101 Windows Phone 7 Apps》读书笔记-ALARM CLOCK

课程内容 Ø 隔离存储空间 Ø 设置 Ø 设置页面向导 Ø Toggle Switch控件 Ø 使用自定义字体     Alarm Clock模仿的...

2046
来自专栏贺贺的前端工程师之路

Flex Box布局学习- 兼容

随着自己写过的页面的增多,也遇到了很多CSS兼容性的问题。这些兼容性问题,都是必然的,因为技术在不断进步,不断革新,所谓,“后浪推前浪,前浪拍死在沙滩上”,当然...

922

扫码关注云+社区

领取腾讯云代金券