iTextSharp 从现有的 PDF 模板生成 PDF
Posted
技术标签:
【中文标题】iTextSharp 从现有的 PDF 模板生成 PDF【英文标题】:iTextSharp produce PDF from existing PDF template 【发布时间】:2011-06-08 11:02:08 【问题描述】:我正在研究使用 C# 和 iTextSharp 创建可以采用 PDF 模板并将各种占位符值替换为从数据库中检索到的实际值的可行性。本质上是一个 PDF 邮件合并。我有 iText in action book,但它涵盖了很多我不需要的东西,我正在努力寻找与我想做的事情相关的任何事情。我很乐意使用 PDF 字段作为占位符,只要合并/展平的表单看起来不像其中有字段,输出文档应该看起来像一封邮件合并信函,而不是已填写的表单。在一个理想的世界,我只想搜索 PDF 的文本内容,然后将文本占位符替换为正确的字段值(a la word mail merge)。
谁能给我建议最好的方法,并指出最有用的 iTextSharp 类的使用方向,或者如果你知道 iText in Action 书,指向最有帮助的部分供我阅读。
【问题讨论】:
你的pdf模板是什么格式的? 您所说的格式是指布局,还是超出我对该主题的微薄知识范围的某种 PDF 技术问题?如果是前者,那么这就是我正在尝试邮件合并的一封信。 No no.. 只是您提供哪种格式的布局来生成文档.. 模板和输出都应该是 PDF,如果这就是你的意思。为了提供更好的上下文,我们目前使用 word 文档模板,我们使用这些模板解析出映射到数据库字段的占位符值,并执行邮件合并类型操作以生成字母。当 word 做得很好时,我们希望避免将 word 文档模板转换为 PDF 的复杂性。因此,我们希望能够将 PDF 模板转换为 PDF 文档,理想情况下,我们的客户创建 PDF 模板所需要做的就是将他们现有的 word 模板保存为 PDF。 【参考方案1】:-
在您选择的页面布局/文本编辑器中构建没有字段的模板。
保存为 PDF。
打开该 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?以上是关于iTextSharp 从现有的 PDF 模板生成 PDF的主要内容,如果未能解决你的问题,请参考以下文章