springboot如何导出PDF 分为模板导出多份与非模板导出

本文介绍了如何在SpringBoot项目中导出PDF文件,包括使用模板和不使用模板两种方式。首先在pom文件中添加依赖,然后创建一个工具包,包含模板导出和非模板导出的方法。模板导出需预先制作PDF表单并用Adobe Acrobat添加表单域,确保域名与工具包方法匹配。在控制器层调用这些方法,以实际业务数据生成PDF导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

首先 pom文件导入依赖

**

<!--导出PDF文件需要的依赖 pdf start-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.10</version>
        </dependency>

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

写一个工具包

**
此包内写了两个方法 用于模板导出 和非模板导出
模板导出需要先做一个PDF表单 使用world做了模板以后 另存为PDF
然后使用Adobe Acrobat 进行添加表单 注意每个域的名字要与我们工具包里面的导出的名字相同
createPDF这个方法里面调用了下面的一些测试方法,测试方法 仅供参考

package com.example.house.SYSDBA.util;

import com.example.house.SYSDBA.entity.Product;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;

/**
 * 这个工具类用于测试PDF的非模板导出,和多页使用一个模板
 */
@Component
public  class DownPdf {
   


    /**
     * 用pdf模板生成多条内容
     */
    public static void fillTemplate(List<Product> list,String newPDFPath) {
   
        // 模板路径,此处放在了项目的static文件夹下面
        String templatePath = "static/产品模板.pdf";
        FileOutputStream out;
        try {
   
            out = new FileOutputStream(newPDFPath);// 输出流
            Document doc = new Document();
            PdfCopy copy = new PdfCopy(doc, out);
            doc.open();

           // int count=0;
            for (Product product : list) {
   
                PdfReader reader = new PdfReader(templatePath);// 读取pdf模板
                ByteArrayOutputStream bos;
                PdfStamper stamper;
                bos = new ByteArrayOutputStream();
                stamper = new PdfStamper(reader, bos);
                AcroFields form = stamper.getAcroFields();

                form.setField("type",product.getType());
                form.setField("price",product.getPrice()+"");
                form.setField("amount",product.getAmount()+"");
                form.setField("provider",product.getProvider());
                form.setField("categoryId",product.getCategoryId()+"");

                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String gmtDate = dateFormat.format(product.getGmtDate());
                String createDate = dateFormat.format(product.getCreateDate());

                form.setField("gmtDate",gmtDate);
                form.setField("createDate",createDate);

                stamper.setFormFlattening(true);
                stamper.close();
                PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
                copy.addPage(importPage);
//                count++;
//                if (count == 10){
   
//                    break;
//                }
            }
            doc.close();
        } catch (IOException e) {
   
            e.printStackTrace();
        } catch (DocumentException e) {
   
            e.printStackTrace();
        }
    }


    /**
     * 该方法用于非模板的导出PDF 里面可以调用下面的一些方法做测试,生成需要的文字,表格等
     * @param filename
     * @param products
     * @throws IOException
     * @throws DocumentException
     */
    public static void createPDF(String filename, List<Product> products) throws IOException, DocumentException {
   
        Document document = new Document(PageSize.A4);
        //下面的结果没有生效 中文文字没出来
        Font font = new Font(BaseFont.createFont("C://Windows//Fonts//simfang.ttf", BaseFont.IDENTITY_H,
                BaseFont.NOT_EMBEDDED));
        try {
   
            PdfWriter.
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值