美文网首页
IText使用 PDF模板生成PDF

IText使用 PDF模板生成PDF

作者: Toplhyi | 来源:发表于2019-02-13 16:31 被阅读0次
    1. 项目中加入Maven依赖:
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itextpdf</artifactId>
      <version>5.5.6</version>
    </dependency>
    
    1. 创建PDFUtil工具类(可根据需要自行修改),如下:
      参数:
    参数名 参数描述
    fileName PDF模板名称
    fontName 字体
    data 数据(用于替换PDF模板中的变量)

    返回值:ByteArrayOutputStream

      public class PdfUtil {
          public static ByteArrayOutputStream generatePdfStream(String fileName, String fontName, Map<String, String> data) throws  Exception{
              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(fontName, BaseFont.IDENTITY_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();
              return bos;
          }
      
          public static void fillData(AcroFields fields, Map<String, String> data)
                  throws IOException, DocumentException {
              for (String key : data.keySet()) {
                  String value = data.get(key);
                  fields.setField(key, value); // 为字段赋值,注意字段名称是区分大小写
              }
          }
      }
    

    这种方法适用于PDF模板中的变量不多的情况,如果变量过多使用也不是很方便(编辑PDF模板推荐使用Adobe Acrobat Pro软件)。

    相关文章

      网友评论

          本文标题:IText使用 PDF模板生成PDF

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