java 生成pdf文件(易上手版)

1.引入相關pom依賴

<!--pdf start-->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.itextpdf/font-asian -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>font-asian</artifactId>
    <version>7.1.2</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>
<!--pdf end-->

2.準備pdf 模板文件

準備表單 填寫對應java字段java

3.java生成(初步未優化版)

@GetMapping(value = "/makePdf")
    public AdusResponse makePdf() {
        Map<String,Object> params = new HashMap<>();
        params.put("id",298);
        ReliefBillEntity entity = reliefBillFacade.selectReliefBillEntity(params);
        // 模板路徑
        String templatePath = "C:\\Users\\Administrator\\Desktop\\test.pdf";
        // 生成的新文件路徑
        String newPDFPath = "C:\\Users\\Administrator\\Desktop\\b.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();

            form.setField("reliefNumber",entity.getReliefNumber());
            form.setField("supplierId",entity.getSupplierId().toString());
            form.setField("reliefDate",entity.getReliefDate().toString());
            form.setField("accPeriod",entity.getAccPeriod());
            form.setField("orderNumber",entity.getReliefNumber());
            form.setField("SKC",entity.getAccPeriod());
            form.setField("chksheetId",entity.getChksheetId().toString());
            form.setField("reliefType",entity.getReliefType().getDesc());
            form.setField("oneType",entity.getOneType());
            form.setField("twoType",entity.getOneType());
            form.setField("reliefTypeDesc",entity.getReliefType().getDesc());
            form.setField("number",entity.getOneType());
            form.setField("price",entity.getOneType());
            form.setField("reliefMoney",entity.getReliefMoney().toString());
            form.setField("curCode",entity.getCurCode());
            form.setField("auditor",entity.getAccPeriod());
            form.setField("addTime",entity.getAddTime().toString());
            form.setField("auditor2",entity.getAccPeriod());

            stamper.setFormFlattening(false);// 若是爲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 (Exception e) {
            System.out.println(1);
        }
        return new AdusResponse(SysConstants.ResponseCode.SUCCESS, "", null);

    }

最後提供模板文件與生成後的pdf文件截圖服務器

具體項目中須要注意資源的關閉,統計生成的文件能夠放置文件服務器上統一提供連接地址進行下載等等。這裏僅僅初步更具模板生成含數據的pdf文件。app

這種方式的缺點:不夠靈活,模板文件較爲死板,不便於拓展。優勢:能快速更具模板文件實現功能,難度低優化

相關文章
相關標籤/搜索