我正在研究使用 C# 和 iTextSharp 创建一些东西的可行性,这些东西可以采用 PDF 模板并将各种占位符值替换为从数据库中检索到的实际值。本质上是一个 PDF 邮件合并。我有 iText in action book,但它涵盖了很多我不需要的东西,我正在努力寻找与我想做的事情相关的任何东西。我很乐意使用 PDF 字段作为占位符,只要合并/展平的表单看起来不像其中有字段,输出文档应该看起来像邮件合并的信件而不是已填写的表单。在一个理想的世界,我只想搜索 PDF 的文本内容,然后将文本占位符替换为正确的字段值,即 la word 邮件合并。
谁能告诉我解决这个问题的最佳方法,并指出最有用的 iTextSharp 类的使用方向,或者如果您知道 iText in Action 一书,请指向最有用的部分供我阅读。
最佳答案
- 在您选择的页面布局/文本编辑器中构建没有字段的模板。
- 保存为 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();
}
这将忽略具有多个选择(和异常(exception))的列表框,但除此之外应该准备就绪。鉴于您正在做邮件合并类型的事情,我认为多项选择不会有太大问题。
关于c# - iTextSharp 从现有的 PDF 模板生成 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277701/