【问题标题】:Filling PDF Fields with values in ASP.NET MVC 5用 ASP.NET MVC 5 中的值填充 PDF 字段
【发布时间】:2021-01-14 20:25:17
【问题描述】:

我想在我的 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,但是看了GitHub上的源码,我想到了这个:doc.AcroForm.Elements.SetValue("Text1", new PdfString("abc"));似乎有多种类派生自PdfItemPdfString,@987654329 @ 等)- 只是猜测。

标签: c# asp.net-mvc pdf pdfsharp


【解决方案1】:

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

如果您尝试填充 PDF 表单字段,您还需要此功能,您还需要将 NeedsAppearances 元素设置为 true。否则,PDF 将“隐藏”表单上的值。

【讨论】:

  • 我现在正在尝试这样做:doc.AcroForm.Elements.SetValue("/NeedsAppearances", new PdfBoolean(true)); doc.AcroForm.Elements.SetValue("/Text1", new PdfString("abc")); 但该值在 PDF 文件中仍然不可见。如果我尝试在键前设置没有“/”的值,我会收到System.ArgumentException: 'A PDF name must start with a slash (/).'。我做错了什么?
  • 你检查 needAppearance 的值了吗?
  • 类似这样的: if (doc.AcroForm.Elements.ContainsKey("/NeedAppearances") == false) doc.AcroForm.Elements.Add("/NeedAppearances", new PdfBoolean(true)) ; else doc.AcroForm.Elements["/NeedAppearances"] = new PdfBoolean(true);
【解决方案2】:

好的。我找到了解决办法。

首先,正如用户 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 的帮助。

【讨论】:

  • 另外值得一提的是声明document.AcroForm.Elements.SetValue("/FieldName", new PdfString("yourstring")); 对我不起作用。设置的值在 PDF 中不可见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
相关资源
最近更新 更多