iTextSharp使用现有的PDF模板生成PDF

7
我正在考虑使用C#和iTextSharp创建某个东西的可行性,该东西可以使用PDF模板并将各种占位符值替换为从数据库检索到的实际值。 实质上就是一个PDF邮件合并。我有iText in action书,但它涵盖了很多我不需要的内容,而且我很难找到与我想做的相关的任何东西。只要已合并/平铺的表单看起来不像是有字段的表单,而是像是邮件合并信件,我就可以使用PDF字段作为占位符。在理想情况下,我只想搜索PDF的文本内容,然后替换文本占位符为其正确的字段值,类似于Word邮件合并。

请问有人能够向我建议最佳方法,并指引我使用最有帮助的iTextSharp类,或者如果您了解iText in Action书中最有用的部分,请指点我阅读。


你的PDF模板是什么格式? - Łukasz W.
你所说的格式是指布局吗?还是一些超出我有限知识范围的PDF技术问题?如果是前者,那么这是一封我正在尝试邮件合并的信件。 - Ben Robinson
不,我是指您使用哪种格式来提供布局以生成文档。 - Łukasz W.
模板和输出都应该是PDF格式,如果这就是您的意思。为了更好地解释,我们目前使用的是Word文档模板,我们使用这些模板来解析映射到数据库字段的占位符值,并执行邮件合并类型操作以生成信函。我们希望避免将Word文档模板转换为PDF的复杂性,因为Word可以很好地完成这项工作。因此,我们希望能够进行PDF模板到PDF文档的转换,理想情况下,我们的客户只需要将现有的Word模板保存为PDF即可创建PDF模板。 - Ben Robinson
1个回答

9
  1. 在您选择的页面布局/文本编辑器中创建不带字段的模板。
  2. 保存为PDF格式。
  3. 打开该PDF并向其添加字段。 在Acrobat Pro中很容易做到这一点(如果需要,您可以下载试用版)。 在iText中也可能实现,但要困难得多。

无论哪种情况,您都希望将表单字段设置为没有边框和背景... 这样只有它们的内容才会显示出来,没有框来使您的字段看起来像是字段。

使用iText将字段数据合并到表单中非常简单(请原谅我的Java,我对C#不太了解):

void fillPDF( String filePath, Map<String, String> fieldVals ) {
  PdfReader reader = new PdfReader(myFilePath);

  PdfStamper stamper = new PdfStamper( reader, outputFileStream );
  stamper.setFormFlattening(true);

  AcroFields fields = stamper.getAcroFields();

  for (String fldName : fieldVals.keySet()) {
    fields.setField( fldName, fieldVals.get(fldName) );
  }

  stamper.close();
}

这将忽略具有多个选择项(和异常情况)的列表框,但除此之外应该可以运行。考虑到您正在执行邮件合并类型的操作,我认为多个选择不会成为问题。


我已经在C#中尝试过这个,我的流对象只包含最后的388个字节数据,它应该包含什么?我以为它会包含更新后的PDF文件? - Ben Robinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接