• JAVA使用itext根据模板生成PDF文档


    1、制作PDF模板

    网址打开:https://www.pdfescape.com/open/ 

     

    我们这里先在线上把基础的内容用word文档做好,然后转成PDF模板,直接上传到网站上,这样方便点

    假设我们pdf是这样

     然后我们选择文件上传到网站上之后,如下图所示

     选择文件后,点击upload ,或者可以把文件直接用鼠标拖到Drop PDF Here的位置,也会直接上传,上传成功之后会跳转页面,所下图所示

     接着我们可以进行操作,点击左上角 Form Field,这个是插入字段(你可以理解成是java中文档要用的占位符)

     选择对应的text,如有需要,可以选择其他的模式,好了之后,点击Select

     选择之后用按住鼠标左键,划定要显示的区域(绿色区域)

     然后把鼠标放到绿色区域,点击鼠标右键,点击Object Properties设置属性名称

    userName 就是我们到时候在代码中要替换的属性名,好了之后点击OK,然后依次设置其他的内容

    还可以选中某个表单域,可以对字体、大小等进行设置(线上版本不支持编辑字体样式、具体可以查看 https://www.pdfescape.com/windows/  需要下载软件)

     然后点击鼠标左侧的保存按钮,或者直接按ctrl+s 也可以直接保存,保存之后点击下方的下载按钮,把我们设置的pdf文档下载下来

     

    以上模板就制作好了。 网站还有很多其他的功能,需要的可以自己去研究使用。

    接着是代码书写

    1、引入jar包   iText-2.1.7.jar、itextasian-2.1.7.jar、itext-rtf-2.1.7.jar

       下载地址:https://yvioo.lanzous.com/b00nq830b
                          密码:g912

    2、这里只是一个简单的demo方法,可以根据自己需要改写

    package com.pdf;
    
    import java.io.ByteArrayOutputStream;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    import com.lowagie.text.pdf.AcroFields;
    import com.lowagie.text.pdf.BaseFont;
    import com.lowagie.text.pdf.PdfReader;
    import com.lowagie.text.pdf.PdfStamper;
    
    public class Test {
        public static void main(String[] args) throws Exception {
            export();
            System.out.println("生成完成");
        }
    
        public static void export(){
            try {
                // pdf模板所在路径,就是网站制作好后下载的pdf模板路径
                String fileName = "D:/testpdf.pdf";
                PdfReader reader = new PdfReader(fileName);
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                PdfStamper ps = new PdfStamper(reader, bos);
    
                // 使用中文字体
                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, data());
    
                //必须要调用这个,否则文档不会生成的
                ps.setFormFlattening(true);
                ps.close();
    
                //生成pdf路径存放的路径
                OutputStream fos = new FileOutputStream("D:/result.pdf");
                fos.write(bos.toByteArray());
                fos.flush();
                fos.close();
                bos.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        /**
         * 填充模板中的数据
         */
        public static void fillData(AcroFields fields, Map<String, String> data) {
            try {
                for (String key : data.keySet()) {
                    String value = data.get(key);
                    // 为字段赋值,注意字段名称是区分大小写的
                    fields.setField(key, value);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 填充数据源
         * 其中data存放的key值与pdf模板中的文本域值相对应
         */
        public static Map<String, String> data() {
            Map<String, String> data = new HashMap<String, String>();
            data.put("schoolName", "国际测试测试测试测试");
            data.put("userName", "yvioo");
            data.put("date", "2020/7");
            return data;
        }
    }
  • 相关阅读:
    Stupid Tower Defense
    Lifting the Stone
    城市地平线
    BestCoder Sequence
    Miaomiao's Geometry
    Rating
    Turn the pokers
    Peter's Hobby
    HTTP关键词收集
    HTTP出现前的协议
  • 原文地址:https://www.cnblogs.com/pxblog/p/13261187.html
Copyright © 2020-2023  润新知