Adobe Acrobat pro生成PDF模版 java生成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());
        }

    }

 








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM