C# 使用iTextSharp压模填写PDF中的空白字段
当我等待有人创建一个可填充的PDF供我在我的项目中使用时,我在编写代码时用一个可填充的税务表格代替了它。下面的代码填充了税务PDF表单,但当我用可填充的PDF表单替换税务表单时,它不再有效。我已经验证了字段名是否正确(通过检查acroFields中的字段)。为什么我的表格不填?(模板是可填写的表单) 和PopulatePDF(我还验证了PDFFields.StudentLName有一个值):C# 使用iTextSharp压模填写PDF中的空白字段,c#,asp.net-mvc,itextsharp,C#,Asp.net Mvc,Itextsharp,当我等待有人创建一个可填充的PDF供我在我的项目中使用时,我在编写代码时用一个可填充的税务表格代替了它。下面的代码填充了税务PDF表单,但当我用可填充的PDF表单替换税务表单时,它不再有效。我已经验证了字段名是否正确(通过检查acroFields中的字段)。为什么我的表格不填?(模板是可填写的表单) 和PopulatePDF(我还验证了PDFFields.StudentLName有一个值): 你知道为什么这个新表格不能填吗?表单是否需要某些属性才能使用iTextSharp?iTextSharp是
你知道为什么这个新表格不能填吗?表单是否需要某些属性才能使用iTextSharp?iTextSharp是4.1.2.0版答案是移除括号。“监视”窗口正在“添加”字段名。您确定字段名中包含括号吗?这似乎既没有必要,也有点奇怪。另外,如果你没有捕捉到任何东西,为什么要用try-catch来包装整个区块?啊,括号就是它!当你检查手表窗口中的“字段”时,它们会用括号显示,所以我假设。。。做坏事。我还没有完成日志记录,因此捕获结果是空的。那么,在这种情况下,我将添加它作为回答:)
try
{
if (!string.IsNullOrWhiteSpace(template))
{
pdfMemoryReader = new PdfReader(template);
pdfMemoryReader.RemoveUsageRights(); // prevents the "This document enabled extended features in Adobe Reader...." message
PdfStamper pdfMemoryStamper = null;
try
{
pdfMemoryStamper = new PdfStamper(pdfMemoryReader, memoryStream);
AcroFields acroMemoryFields = pdfMemoryStamper.AcroFields;
acroMemoryFields = PopulatePDF(studentId, termId, acroMemoryFields, PDFFields);
pdfMemoryStamper.FormFlattening = true;
pdfMemoryStamper.Writer.CloseStream = false;
if (pdfMemoryStamper != null)
{
pdfMemoryStamper.Close();
}
memoryStream.Position = 0;
}
finally
{
pdfMemoryReader.Close(); //this supposedly closes the underlying stream
}
}
}
catch
{ }
return memoryStream;
public AcroFields PopulatePDF(Guid studentId, Guid termId, AcroFields acroFields, PDFViewModel PDFFields)
{
SharedInfo(studentId, termId, PDFFields);
acroFields.SetField("[StudentLName]", PDFFields.StudentLName);
acroFields.SetField("[StudentFName]", PDFFields.StudentFName);
acroFields.SetField("[Grade]", PDFFields.StudentFName);
}