美文网首页
1,Java 制作pdf模板赋值

1,Java 制作pdf模板赋值

作者: 滔滔逐浪 | 来源:发表于2022-03-24 10:48 被阅读0次

    1,先制作word文档;
    2,把word文档转成pdf


    image.png

    3,打开pdf 在线制作工具

    https://www.pdfescape.com/account/login/?des=o820D530C24C7B3BE275F55CD3A69266284C2D631093810DB

    4,上传制作好的pdf 文件

    5,给每个字段的对象属性赋字段值


    image.png

    6,在name 那里赋值就可以


    image.png
    7.pom.xml文件:
      <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.4.3</version>
            </dependency>
    
    

    8.工具类文件:

     public void instanceEnded() throws Exception {
            super.instanceEnded();
            Map params = po.getParameters();
            BtMettingsBeforeLogic logic = new BtMettingsBeforeLogic(dbc);
            Map data = logic.view(params);
            // 生成pdf并上传
            //http://localhost:8086/mss_cw/core/system/control/CommonDownload.jsp?groupId=pdfId 访问路径
            if(null != data){
                byte[] bytes = new BtMettingsBeforePDFLogic(dbc).getPdfBytes(data, "btmeetingsbefore_template.pdf");
             
            }
        }
    
    
    package mss.bt.bt005.component;
    
    import com.itextpdf.text.pdf.AcroFields;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.PdfStamper;
    import com.zbiti.core.SystemManager;
    import com.zbiti.core.components.BaseComponent;
    import com.zbiti.core.util.db.DBConnection;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.Map;
    
    public class BtMettingsBeforePDFLogic extends BaseComponent {
    
        public BtMettingsBeforePDFLogic(DBConnection dbc) {
            super(dbc);
        }
    
        /**
         * 获取pdf模板路径
         *
         * @return
         */
        private String getFilePath() {
            String configPath = SystemManager.getConfigPath();
            String filePath = configPath + "mss" + File.separator
                    + "bt" + File.separator + "pdfTemplate" + File.separator;
            return filePath;
        }
    
        /**
         * 获取pdf内容
         *
         * @param data
         * @param fileName
         * @return
         * @throws Exception
         */
        public byte[] getPdfBytes(Map<String, String> data, String fileName) throws Exception {
            // pdf模板所在路径
            PdfReader reader = new PdfReader(this.getFilePath() + 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();
    
            byte[] bytes = bos.toByteArray();
            bos.close();
            reader.close();
            return bytes;
        }
    
        /**
         * 填充模板中的数据
         */
        private 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();
            }
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:1,Java 制作pdf模板赋值

          本文链接:https://www.haomeiwen.com/subject/yaykjrtx.html