mzo*_*ola 5 c# pdf asp.net itext
我正在使用 iTextSharp,但遇到了无法解决的问题。我正在加载一个现有的 PDF 表单,其中包含文本字段和复选框的混合体。我在将表单发送到浏览器之前动态添加一个提交按钮,在浏览器中填写表单然后重新提交到服务器。我的问题是我无法让 PDF 提交回所有已填充和空白的字段。我已经确定了应该返回所有字段的代码,但我无法返回空复选框。我现在认为这是不可能的。任何人使用使用 Acrobat Pro(而不是 LiveCycle)创建的 PDF Acroform 来执行此操作。请参阅下面的创建按钮的代码片段。我正在使用 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);
Run Code Online (Sandbox Code Playgroud)
根据 PDF 规范,第 12.7.5.2 节 - 提交表单操作,表 237,您要设置第二个标志位,该标志位IncludeNoValueFields适用于文本字段,但正如您所见,不适用于复选框。不幸的是,如果您查看12.7.3.1 - 字段字典常规,表 221,您将看到 PDF 中的每个字段都可以在其各自的字段标志中设置其第三位,该位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);
Run Code Online (Sandbox Code Playgroud)
下面是一个包含两个复选框、一个单选按钮组和一个文本字段的表单的结果。
<?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>
Run Code Online (Sandbox Code Playgroud)
在服务器端,您只需使用即可Request.InputStream获取 XML。
另一种选择是实际上只是通过网络提交 PDF 并使用服务器端的东西来解析它:
int flags = PdfAction.SUBMIT_PDF;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2934 次 |
| 最近记录: |