java使用iText为pdf模板生成pdf

  1. 用word导出pdf文件格式
  2. 在线生成pdf模板文件表单,网址:https://www.pdfescape.com java使用iText为pdf模板生成pdf_第1张图片上传刚刚保存的pdf文件java使用iText为pdf模板生成pdf_第2张图片在下拉中选择自己需要的类型java使用iText为pdf模板生成pdf_第3张图片选中文本框点击鼠标右键选择 object Propertiesjava使用iText为pdf模板生成pdf_第4张图片 

在name框中输入你要填充的字段名称,其他请根据自身需要选择,做完表单模板后点击

java使用iText为pdf模板生成pdf_第5张图片下载该模板。

3. 使用 iText 来填充表单,在pom文件中加入


        RELEASE


       com.itextpdf
       itext7-core
       ${itext.version}
       pom
 


来导入itext所需包

4. 生成填充工具类

/**
 * pdf文件生成工具类
 * @author ls
 *
 */
public class PdfFileGenerateUtil {
    
    private static Logger logger = LogManager.getLogger(PdfFileGenerateUtil.class);
    /**
        *   文件生成
     * @param inputPdfTempletaPath pdf模板文件路径
     * @param outputFilePath 要生成pdf文件存放位置
     * @throws IOException 
     */
    public static boolean generatePdf(String inputPdfTempletaPath,String outputFilePath,Map fillParam) {
        if(Tools.isEmpty(inputPdfTempletaPath) || Tools.isEmpty(outputFilePath) || fillParam == null) {
            return false;
        }
        try {
            File outFile = new File(outputFilePath);
            if(!outFile.exists()) {
                if(!outFile.getParentFile().exists()) {
                    outFile.getParentFile().mkdirs();
                }
                outFile.createNewFile();
            }
            PdfReader pdfReader = new PdfReader(new FileInputStream(inputPdfTempletaPath));
            PdfWriter writer = new PdfWriter(new FileOutputStream(outFile));
            fillParam(pdfReader,writer,fillParam);
            pdfReader.close();
            writer.close();
        } catch (Exception e) {
            logger.error("生成pdf文件失敗,消息如下{}",e);
            return false;
        }
        return true;
    }
    /**
                  *   参数填充
     * @param pdfReader
     * @param pdfWriter
     * @param fillParam
     * @throws IOException
     */
    private static void fillParam(PdfReader pdfReader, PdfWriter pdfWriter,Map fillParam) throws IOException{
        //1、创建pdf文件
        PdfDocument pdf = new PdfDocument(pdfReader, pdfWriter);
        //2、创建中文字体
        PdfFont f2 = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", true);
        //3、获取pdf模板中的域值信息
        PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
        Map fieldMap = form.getFormFields();
        Iterator paramIterator = fillParam.keySet().iterator();
        while (paramIterator.hasNext()) {
            String key = paramIterator.next();
            String value = fillParam.get(key).toString();
            PdfFormField formField = fieldMap.get(key);
            if (formField == null) {
                continue;
            }
            //4、填充信息
            formField.setValue(value).setFont(f2);
        }
        //5、设置文本不可编辑
        form.flattenFields();
        pdf.close();
    }
}

这里有个坑 在网上找的设置中文显示是直接在PdfDocument处设置,但是我未能成功,只能是在formField.setValue(value).setFont(f2);设置后中文才可以显示。

你可能感兴趣的:(JAVA,java,itext,pdf模板)