itextsharp设置压模FormFlatttening = true导致无输出

时间:2015-03-06 21:36:11

标签: c# itextsharp pdfstamper

在VS2010中使用itextsharp v5.5.5.0 设置压模FormFlattening = true没有字段数据写入输出pdf。如果设置为false,则数据全部存在&正确但仍可编辑(我不想要)

PdfReader pdfTemplate = new PdfReader("..\\..\\pdf\\BFC-Template.pdf");
FileStream fileOutputStream = new FileStream("..\\..\\pdf\\BFC.pdf", FileMode.Create);
PdfStamper stamper = new PdfStamper(pdfTemplate, fileOutputStream);

stamper.AcroFields.SetField("FitID", "1234");
stamper.AcroFields.SetField("FitBy", "Fred Flintstone");
stamper.AcroFields.SetField("FitDate", "03/11/2015");
stamper.AcroFields.SetField("FitLocation", "Bedrock");

stamper.FormFlattening = true;
stamper.Close();
pdfTemplate.Close();
fileOutputStream.Close();

2 个答案:

答案 0 :(得分:1)

尝试添加:

stamper.AcroFields.GenerateAppearances = true;

编辑:

如果您的表单是动态表单。你可能需要改变

stamper.AcroFields.SetField("FitID", "1234");

为:

stamper.AcroFields.Xfa.DatasetsSom.Name2Node["FitID"].InnerText = "1234"

答案 1 :(得分:0)

没关系,但您可以尝试从pdfStamper字段中实例化AcroFields对象。

PdfStamper stamper = new PdfStamper(pdfTemplate, fileOutputStream);
AcroFields pdfFields = pdfStamper.AcroFields;

然后你可以使用pdfFields设置每个字段:

pdfFields.SetField("FitID", "1234");
pdfFields.SetField("FitBy", "Fred Flintstone");
pdfFields.SetField("FitDate", "03/11/2015");
pdfFields.SetField("FitLocation", "Bedrock");
stamper.FormFlattening = true;
stamper.Close();

我有这个确切的设置,它适用于我。