IText使用 PDF模板生成PDF

  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软件)。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容