更改 PDF 中的标签文本

Change text of label in PDF

我在编辑 PDF 文档中的字段时遇到问题。

我使用 OpenOffice 创建了一个简单的发票,并通过表单创建工具添加了一些字段。之后我将它导出为带有表格的 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

编辑2:

这是我在 OpenOffice 中设置 属性 的方式:

使用 Open Office 创建表单时,Open Office 向 PDF 添加一个参数,指示处理 PDF 的软件不创建任何外观流,而是让 PDF 查看器创建这些外观。

只要表单保持交互,此方法就有效,但一旦将表单展平,就根本不会创建任何外观。

您可以通过添加以下行解决此问题:

fields.GenerateAppearances = true;

通过这种方式,您可以强制 iTextSharp 生成外观。