更改PDF格式的标签文本

时间:2015-11-25 15:53:44

标签: c# pdf itextsharp

我在编辑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:

这是我在OpenOffice中设置属性的方法: OpenOffice TextField Property

1 个答案:

答案 0 :(得分:1)

使用Open Office创建表单时,Open Office会向PDF指令软件添加一个参数,处理PDF不会创建任何外观流,而是将其留给PDF查看器来创建这些外观。

只要表单保持交互状态,这就有效,但只要您将表单展平,就不会创建任何外观。

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

fields.GenerateAppearances = true;

这样,您可以强制iTextSharp生成外观。