栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 使用Itext导出固定模板的pdf文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 使用Itext导出固定模板的pdf文件

场景:java中使用Itext导出pdf

前期准备:下载Adobe Acrobat DC 软件 前期制作需要导出的pdf模板
模板制作步骤

先在word文档上制作出自己需要的模板样式,例如:

把该word保存成pdf格式,然后再用软件打开

给需要填值的地方添加文本域,并填上代码中对应的字段

最后另存到需要存放的地址,格式为pdf

具体代码实现

依赖

 
            com.itextpdf
            itextpdf
            5.5.10
        

        
            com.itextpdf
            itext-asian
            5.2.0
        

这里要注意,依赖一定要添加到工具类或者具体实现的模块项目,并且两个必须添加
(昨天只添加了第一个依赖,代码不报错,但导出的pdf文件没有值,死活找不到问题)

工具类

public class PdfUtil {

    
    // 利用模板生成pdf
    public  void fillTemplate(Map o, OutputStream out, String templatePath) {
        PdfReader reader;
        ByteArrayOutputStream bos;
        PdfStamper stamper;
        try {

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

            java.util.Iterator it = form.getFields().keySet().iterator();

            while (it.hasNext()) {
                String name = it.next().toString();
                String value = o.get(name)!=null?o.get(name).toString():"";
                form.setField(name,value);
            }
            stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
            stamper.close();

            document doc = new document();
            //            Font font = new Font(bf, 32);
            PdfCopy copy = new PdfCopy(doc, out);
            doc.open();
            
            PdfimportedPage importPage = copy.getimportedPage(new PdfReader(bos.toByteArray()), 1);
            copy.addPage(importPage);
            
            doc.close();

        } catch (IOException e) {
            System.out.println(e);
        } catch (documentException e) {
            System.out.println(e);
        }
    }
}

这里需要注意一下,这串代码只会导出一页,如果想导出多页,则需把代码改成

   //改成这样就不会只显示一页了。
            PdfimportedPage importPage = null;
            ///循环是处理成品只显示一页的问题
            for (int i=1;i<=reader.getNumberOfPages();i++){
                importPage = copy.getimportedPage(new PdfReader(bos.toByteArray()), i);
                copy.addPage(importPage);
            }

具体controller代码

  public AjaxResult exportRecord(@PathVariable("recordId") String recordId,HttpServletResponse response) throws IOException {
        String fileName = FileUtils.encodingPdfFilename("******"); //导出时具体的文件名
        CykEnterpriseReportRecord cykEnterpriseReportRecord = cykEnterpriseReportRecordService.selectCykEnterpriseReportRecordByReportRecordId(recordId);
        String templateFileName = "";
        
        templateFileName =  EcenterConfig.getProfile() +  "/template_endwise.pdf";//找到pdf模板
        //这个是查询出来的实体类,如果是其他类型的也改成String类型的就可
         String json = JSONObject.toJSONString(cykEnterpriseReportRecord);
        try {
            json = java.net.URLDecoder.decode(json,"UTF-8");  //解码
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        JSonObject jsonObject = JSONObject.parseObject(json);
        Map mapJson = (Map) JSONObject.toJSON(jsonObject);
        // 设置response参数,可以打开下载页面
        response.reset();
        response.setCharacterEncoding("UTF-8");
        // 定义输出类型
        response.setContentType("application/PDF;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment; filename=" + "assessment.pdf");
        try {
            OutputStream out = new FileOutputStream(FileUtils.getAbsoluteFile(fileName));
            PdfUtil pdf = new PdfUtil();
            pdf.fillTemplate(mapJson ,out,templateFileName);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return AjaxResult.success(fileName);
    }

具体导出结果

完美收官!!!!撒花~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703819.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号