java-常用-iText5生成pdf

1.添加依赖

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

2.创建模板

3.对应的代码

 public static void main(String[] args) throws Exception {
        test();
    }

    public static void test() throws IOException, DocumentException {
        // pdf模板

        String fileName = "C:\\Users\\Hasee\\Desktop\\文件\\个人信息采集表.pdf";
        //读取pdf
        PdfReader reader = new PdfReader(fileName);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        //将要生成的目标PDF文件名称
        PdfStamper ps = new PdfStamper(reader, bos);
        //PdfContentByte under = ps.getUnderContent(1);
        //设置中文字体
        BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();
        fontList.add(bf);
        //取出报表模板中的所有字段
        AcroFields fields = ps.getAcroFields();
        fields.setSubstitutionFonts(fontList);
        //对表单数据进行赋值
        fillData(fields, ps, data());
        //必须要调用这个,否则文档不会生成的
        ps.setFormFlattening(true);
        ps.close();
        OutputStream fos = new FileOutputStream("E:/个人信息采集表.pdf");
        fos.write(bos.toByteArray());
        fos.flush();
        fos.close();
        bos.close();
    }

    public static void fillData(AcroFields fields, PdfStamper ps, Map<String, String> data) throws IOException, DocumentException {
        // 为字段赋值,注意字段名称是区分大小写的
        for (String key : data.keySet()) {
            if (key.equals("image")){
                /**
                 * 添加图片
                 */
                String imgpath = data.get(key);
                int pageNo = fields.getFieldPositions(key).get(0).page;
                Rectangle signRect = fields.getFieldPositions(key).get(0).position;
                float x = signRect.getLeft();
                float y = signRect.getBottom();
                // 读图片
                Image image = Image.getInstance(imgpath);
                // 获取操作的页面
                PdfContentByte under = ps.getOverContent(pageNo);
                // 根据域的大小缩放图片
                image.scaleToFit(signRect.getWidth(), signRect.getHeight());
                // 添加图片
                image.setAbsolutePosition(x, y);
                under.addImage(image);
            }else {
                String value = data.get(key);
                fields.setField(key, value);
            }
        }

    }

    public static Map<String, String> data() {

        Map<String, String> data = new HashMap<String, String>();

        data.put("name", "王二");

        data.put("sex", "男");

        data.put("age", "20");

        data.put("companyName", "XXXXXX公司");

        data.put("birth", "2002年10月10日");

        data.put("area", "xxx省xx市xx区xx街道xx弄");

        //选择框的设置On为选中
        data.put("build", "On");
        data.put("house", "On");
        data.put("other", "Off");
        data.put("first", "On");return data;

    }

4.生成的样式

 

posted @ 2020-09-09 23:34  雨后星辰zxj  阅读(365)  评论(0编辑  收藏  举报