使用 ASP.NET MVC 5 中的值填充 PDF 字段

Filling PDF Fields with values in ASP.NET MVC 5

我想在我的 Web 应用程序(使用 ASP.NET MVC 5 开发)中填充现有的 PDF 文件。 PDF 文件有一个名为“Text1”的字段。在此字段中,我想写入值“abc”。我目前正在尝试为此目的使用 PdfSharp。

这就是我目前尝试在 PDF 的字段中设置值的方式:

var doc = PdfReader.Open(ControllerContext.HttpContext.Server.MapPath("~/Documents/test.pdf"), PdfDocumentOpenMode.Modify);
doc.AcroForm.Fields["Text1"].ReadOnly = false;

这就是准备。

然后我尝试了很多东西。例如,这个:

doc.AcroForm.Elements.SetValue("Text1", "abc");

但这没有用,因为string无法转换为PdfSharp.Pdf.PdfItem

我也试过这个:

doc.AcroForm.Fields["Text1"].Value = "abc";

我再次遇到与上述相同的异常。

是否可以设置现有 PDF 字段的值?这适用于 PdfSharp 吗?

您必须像这样使用 PDFSharp 库中的 PdfString document.AcroForm.Elements.SetValue("/FieldName", new PdfString("yourstring"));

如果您尝试填充 PDF 表单域,您也需要这个,您还需要将 NeedsAppearances 元素设置为 true。否则,PDF 将“隐藏”表单上的值。

好的。我找到了解决方案。

首先,正如用户 Mu-Majid 所写,您必须将 NeedAppearances 元素设置为 true。这是按如下方式完成的:

if (doc.AcroForm.Elements.ContainsKey("/NeedAppearances") == false)
{
    doc.AcroForm.Elements.Add("/NeedAppearances", new PdfBoolean(true));
}
else
{
    doc.AcroForm.Elements.SetValue("/NeedAppearances", new PdfBoolean(true));
}

然后要设置字段的值,您必须考虑您拥有的字段类型。对于简单的文本字段,您可以按如下方式设置值:

doc.AcroForm.Fields["Text1"].Value = new PdfString("abc");

复选框的值可以设置如下:

var chckBox = (PdfCheckBoxField)(doc.AcroForm.Fields["chckbx1"]);
chckBox.Checked = true;

可以看出,您必须首先将字段显式转换为正确的类型。之后就可以设置值了。

这同样适用于下拉元素。这是为下拉元素设置值的方式:

var drpDwn = (PdfComboBoxField)(doc.AcroForm.Fields["Dropdown1"]);
drpDwn.Value = new PdfString("3");

在 PDF 中,值“3”的对应文本会出现在下拉列表中。

在此非常感谢 Mu-Majid 的帮助。