Java--依照PDF模板进行数据的填充并输出

Java–依照PDF模板进行数据的填充并输出

今天因为有一个逻辑问题迟迟没有定下来,老板去了学习,所以闲着也是闲着,就抽空学习研究了下用Java输出PDF文件的技术。

引入相应的Jar包

这是导出pdf文件必备的jar包,我们将其在pom文件中引用

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.10</version>
        </dependency>

pdf生成的主要方法

首先需要创建一个pdf模板,再把该模板引入至项目的resource文件夹下,再在代码中进行资源文件的读取。

private static ByteArrayOutputStream createPdfStream(String templateFilePath, String templateFileName, Map<String, String> resultMap) {
          
   
        ByteArrayOutputStream ba = new ByteArrayOutputStream();
        try {
          
   
            PdfReader reader = new PdfReader(templateFilePath + "\" + templateFileName);
            PdfStamper stamp = new PdfStamper(reader, ba);
            //使用字体
            BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            //获取模版中的字段
            AcroFields form = stamp.getAcroFields();
            //填充表单
            if (resultMap != null) {
          
   
                //依次获取要填充的数据
                for (Map.Entry<String, String> entry : resultMap.entrySet()) {
          
   
                    form.setFieldProperty(entry.getKey(), "textfont", bf, null);
                    form.setField(entry.getKey(), entry.getValue());
                }
            }
            stamp.setFormFlattening(true);//设置为不能编辑
            stamp.close();
            reader.close();
        } catch (IOException ioException) {
          
   
            ioException.printStackTrace();
        } catch (DocumentException documentException) {
          
   
            documentException.printStackTrace();
        }
        return ba;
    }

导出的方法

@PostMapping("/pdfTest")
    public String pdfTest() {
          
   
        //定义要填充的数据封装成Map对象
        Map<String, String>  resultMap= new HashMap<String, String>(0);
        resultMap.put("name","张三");
        //根据模板填充数据源
        try{
          
   
            ByteArrayOutputStream pdf = createPdfStream(ClassLoader.getSystemResource("template").getPath(), "pdf.pdf", resultMap);
            //输出Pdf的位置
            String newPadPath="D:\idea_workspace\springboot-webscoket\src\main\resources\template"+"\pdf2.pdf";
            FileOutputStream out = new FileOutputStream(newPadPath);
            out.write(pdf.toByteArray());
            out.flush();
            out.close();
            pdf.close();
        }catch (Exception e){
          
   
            e.printStackTrace();
        }
        return "success";
    }

根据以上的代码可以进行测试,可以进行pdf的导出。

结语

不知为何,最近心情十分地烦躁,或许是因为环境的因素吧,每次来到了工位上就想马上下班一起和她煲剧,在这里感受不到任何的乐趣。还是那句话,既来之,则安之。

经验分享 程序员 微信小程序 职场和发展