Java Maven 根據模板生成PDF文件

記錄下,忘記是誰的文章了,侵權請聯繫博主刪除。

參考:https://blog.csdn.net/CSDN__FL/article/details/82870571

pom:

       <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>
       <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
        <dependency>
               <groupId>com.itextpdf</groupId>
               <artifactId>itext-asian</artifactId>
               <version>5.2.0</version>
        </dependency>

使用word轉成PDF文件模板

word轉PDF

使用 Adobe Acrobat Pro 打開文件【模板.pdf】

第一步

整體代碼:

package com.mj.mifang.test.controller;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

@Controller
public class Model {

	// 利用模板生成pdf
		public static void fillTemplate(Map<String,Object> o) {
			// 模板路徑
			String templatePath = "C:/pdf/model.pdf";//原PDF模板
			// 生成的新文件路徑
			String newPDFPath = "C:/pdf/aa.pdf";
			 PdfReader reader;
		        FileOutputStream out;
		        ByteArrayOutputStream bos;
		        PdfStamper stamper;
		        try {                                       //↓↓↓↓↓這個是字體文件
		            BaseFont bf = BaseFont.createFont("C:/windows/fonts/simsun.ttc,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//用的是系統字體,此路徑是系統路徑,可網上自行下載字體類型
		            Font FontChinese = new Font(bf, 12f, Font.BOLD);
		            out = new FileOutputStream(newPDFPath);// 輸出流
		            reader = new PdfReader(templatePath);// 讀取pdf模板
		            bos = new ByteArrayOutputStream();
		            stamper = new PdfStamper(reader, bos);
		            AcroFields form = stamper.getAcroFields();
		            Map<String,String> datemap = (Map<String,String>)o.get("datemap");
		            form.addSubstitutionFont(bf);
		            for(String key : datemap.keySet()){
		                String value = datemap.get(key);
		                System.out.println(value+"*(*(*(**---:"+key);
		                form.setField(key,value);
		            }
		            stamper.setFormFlattening(true);// 如果爲false,生成的PDF文件可以編輯,如果爲true,生成的PDF文件不可以編輯
		            stamper.close();
		            Document doc = new Document(PageSize.A4, 0, 0, 0, 0);
		            Font font = new Font(bf, 32);
		            PdfCopy copy = new PdfCopy(doc, out);
		            doc.open();
		            PdfImportedPage importPage = null;
		            ///循環是處理成品只顯示一頁的問題
		            for (int i=1;i<=reader.getNumberOfPages();i++){
		                importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i);
		                copy.addPage(importPage);
		            }
		            doc.close();
		            System.err.println("生成pdf文件完成!");
		        } catch (IOException e) {
		            System.out.println(e);
		        } catch (DocumentException e) {
		            System.out.println(e);
		        }
		}
		public static void main(String[] args) {
			 Map<String,String> map = new HashMap();
		        map.put("Text1","HT188888888888");//Text1 是PDF表單名稱,有多少就添加多少
		        map.put("Text2","李四");//Text2 是PDF表單名稱,有多少就添加多少
		        map.put("Text3","111111111111111111");//
		        map.put("Text4","188888888888");
		        map.put("Text5","王五");//
		        map.put("Text6","11111111111111111");//
		        map.put("Text7","188888888888");
		        map.put("Text8","111");//
		        map.put("Text9","2018-11-11");//
		        map.put("Text10","2018-11-18");
		        map.put("Text11","0.05");//
		        map.put("Text13","阿拉蕾");//
		        map.put("Text14","888.67");
		        map.put("Text15","李四");//
		        map.put("Text16","王五");
		        map.put("Text17","2018-11-11");//
		        Map<String,Object> o=new HashMap();
		        o.put("datemap",map);
		        //調用方法
		        fillTemplate(o);
		}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章