我在编辑PDF文档中的字段时遇到问题。
我使用OpenOffice创建了一个简单的发票,并通过表单创建工具添加了一些字段。之后我用PDF格式将其导出为PDF格式。
我要更改的其中一个字段名为" {Firma}"我想用字符串填充此字段。
下面是一个简短的示例代码,它似乎不起作用,字段" {Firma}"在输出文件中仍然是空的。
public static void ReplacePdfForm()
{
string fileNameExisting = @".\template\templaterechnung.pdf";
string fileNameNew = @".\rechnung.pdf";
using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
{
// Open existing PDF
var pdfTemplate = new PdfReader(existingFileStream);
// PdfStamper, (PDF to be changed)
var pdfInvoice = new PdfStamper(pdfTemplate, newFileStream);
AcroFields fields = pdfInvoice.AcroFields;
// set form fields
fields.SetField("{Firma}", "Test1");
pdfInvoice.FormFlattening = true;
pdfInvoice.FreeTextFlattening = true;
pdfInvoice.Close();
pdfTemplate.Close();
}
}
(我还有一些字段也没有改变,但我从代码中删除了它们,因为它们的行为方式相同。)
提前致谢。
编辑:
这是我的PDF:http://www.file-upload.net/download-11071404/templaterechnung.pdf.html
EDIT2:
答案 0 :(得分:1)
使用Open Office创建表单时,Open Office会向PDF指令软件添加一个参数,处理PDF不会创建任何外观流,而是将其留给PDF查看器来创建这些外观。
只要表单保持交互状态,这就有效,但只要您将表单展平,就不会创建任何外观。
您可以通过添加以下行来解决此问题:
fields.GenerateAppearances = true;
这样,您可以强制iTextSharp生成外观。