gpt4 book ai didi

c# - iTextSharp,提交所有字段的代码

转载 作者:行者123 更新时间:2023-11-30 12:14:00 25 4
gpt4 key购买 nike

我正在使用 iTextSharp,但遇到了一个我无法解决的问题。我正在加载现有的 PDF 表单,其中包含混合的文本字段和复选框。在将表单发送到浏览器之前,我动态地向表单添加了一个提交按钮,在浏览器中填写表单然后重新提交到服务器。我的问题是我无法让 PDF 提交回所有已填充和空白的字段。我已经确定了应该返回所有字段的代码,但我无法返回空复选框。我正处于我认为不可能的地步。任何使用 Acrobat Pro 创建的 PDF Acroform 执行此操作的人 - 而不是 LiveCycle。请参阅下面的创建按钮的代码片段。我正在使用 iTextSharp 在 C# asp.net 4 中执行此操作。

    ButtonRect = MakeButtonRect(PDFFormOut, ButtonPos);
button = new PushbuttonField(PDFFormOut.Writer, ButtonRect, "postSubmit");
button.BackgroundColor = BaseColor.LIGHT_GRAY;
button.BorderColor = GrayColor.BLACK;
button.BorderWidth = 1f;
button.BorderStyle = PdfBorderDictionary.STYLE_BEVELED;
button.TextColor = GrayColor.GREEN;
button.FontSize = 8f;
button.Text = "Submit";
button.Visibility = PushbuttonField.VISIBLE_BUT_DOES_NOT_PRINT;
field = button.Field;
field.Put(PdfName.TU, new PdfString("Save changes and return to the folder."));
**field.Action = PdfAction.CreateSubmitForm(@"http://" + Application["WebSiteRoot"].ToString() + @"/SaveForm.aspx?OP=SAV", null, PdfAction.SUBMIT_HTML_FORMAT | PdfAction.SUBMIT_INCLUDE_NO_VALUE_FIELDS);**
PDFFormOut.AddAnnotation(field, 1);

最佳答案

根据 PDF 规范,第 12.7.5.2 节 - 提交表单操作,表 237,您要设置第二个标志位,即 IncludeNoValueFields,它适用于文本字段,但如您所见,不是复选框。不幸的是,如果您查看 12.7.3.1 - Field Dictionaries General,表 221,您会看到 PDF 中的每个字段都可以在其各自的字段标志中设置其第 3 位,即 NoExport 位,IncludeNoValueFields 不包含。因此不幸的是,像这样通过 HTTP 传递名称/值对您不起作用。

但是,您可以将提交操作设置为包含 PdfAction.SUBMIT_XFDF,这将为您提供包含每个字段的 XML 文件,包括未标记为导出的字段。

int flags = PdfAction.SUBMIT_XFDF | PdfAction.SUBMIT_INCLUDE_NO_VALUE_FIELDS;
field.Action = PdfAction.CreateSubmitForm(@"http://localhost/", null, flags);

下面是一个带有两个复选框、一个单选按钮组和一个文本字段的表单的结果。

<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
<field name="Check Box3"><value>Off</value></field>
<field name="Check Box4"><value>Off</value></field>
<field name="Text7"><value/></field>
<field name="YesOrNo"><value>Yes</value></field>
<field name="postSubmit"/>
</fields>
<ids original="B8B00E1D7C7ADB119BD056BC3BD5CA9F" modified="05CBB9BE1720DA2B6FC45E071B74F7E3"/>
</xfdf>

在服务器端,您可以使用 Request.InputStream 来获取您的 XML。

另一种选择是实际上只是通过网络提交 PDF 并使用服务器端的东西来解析它:

int flags = PdfAction.SUBMIT_PDF;

关于c# - iTextSharp,提交所有字段的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10658518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com