4

iTextSharp を使用していますが、解決できない問題に遭遇しました。テキスト フィールドとチェック ボックスが混在する既存の PDF フォームを読み込んでいます。フォームに送信ボタンを動的に追加してから、ブラウザーに送信して入力し、サーバーに再送信します。私の問題は、PDF を取得して、入力されたフィールドと空のフィールドをすべて返送できないことです。すべてのフィールドを返すコードを特定しましたが、空のチェック ボックスを返すことができません。私はそれが不可能だと思うところにあります。LiveCycle ではなく、Acrobat Pro を使用して作成された 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);
4

1 に答える 1

3

PDF 仕様、セクション 12.7.5.2 - Submit-Form Action、表 237 に従って、テキスト フィールドで機能する 2 番目のフラグ ビットを設定していIncludeNoValueFieldsますが、チェックボックスではありません。残念ながら、 12.7.3.1 - Field Dictionaries General, table 221をチェックすると、PDF 内の各フィールドが、含まれていないNoExportビットである個々のフィールド フラグに設定された 3 番目のビットを持つことがわかります。IncludeNoValueFieldsしたがって、残念ながら、このように HTTP 経由で名前/値を渡すことはできません。

ただし、submit アクションを include に設定するPdfAction.SUBMIT_XFDFと、エクスポート用にマークされていないものを含むすべてのフィールドを含む XML ファイルが得られます。

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

以下は、2 つのチェックボックス、1 つのラジオ ボタン グループ、1 つのテキスト フィールドを含むフォームの結果です。

<?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 を取得できます。

もう1つのオプションは、実際にPDFをネットワーク経由で送信し、サーバー側で何かを使用して解析することです。

int flags = PdfAction.SUBMIT_PDF;
于 2012-05-20T15:41:25.097 に答える