7

フォームにITextsharpを入力し、次のコードを試してpdfのすべてのフィールドを取得しようとしています。

  string pdfTemplate = @"c:\Temp\questionnaire.pdf";


            PdfReader pdfReader = new PdfReader(pdfTemplate);

            StringBuilder sb = new StringBuilder();
            foreach (var de in pdfReader.AcroFields.Fields)
            {
                sb.Append(de.Key.ToString() + Environment.NewLine);
            }

ただし、foreachループは常にnullカウントです。ここからの例を試したので、自分自身をファイルするために何かをする必要がありますか?それはうまくいきます...これは私が埋めようとしているpdfの例です

何か案は?

編集 ::

PDFフィールドのヌルエラー

4

2 に答える 2

5

結局のところ、記入するPDFの「フォーム」は、実際には(PDF用語で)フォームではありませんでした。したがって、2つの選択肢があります。

  1. @ tschmit007の回答へのコメントで説明されているように、ハードコードまたは構成された「フィールド」の位置と寸法を使用して、ページのコンテンツにテキストを直接追加します。

  2. 実際のPDFフォームフィールドをPDFに追加して、後で入力するためのテンプレートとして使用する実際のPDFフォームを生成します。

実際のフォームフィールドは、Adobe Acrobatなどのグラフィカルツールを使用して追加するか、iText(Sharp)を使用して追加できます。iText in Action — 2nd Editionの第8章と、ここでJava用に、ここで.Net用に利用可能なサンプルをご覧ください。

これらのサンプルは主に、新しく生成されたPDFドキュメントにフォームフィールドを追加します。stamper.getWriter()ただし、 Javaとstamper.WriterC#で使用する内部PdfWriterを公開するPdfStamperにフォームフィールドを追加するために、実質的に同じコードを使用できます。ただし、代わりにwriter.addAnnotation(field)を使用する必要がstamper.addAnnotation(field, page)あります。

于 2013-01-24T12:03:35.537 に答える
5

試す:

using (FileStream outFile = new FileStream("result.pdf", FileMode.Create)) {
    PdfReader pdfReader = new PdfReader("file.pdf");
    PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile);
    AcroFields fields = pdfStamper.AcroFields;
    //rest of the code here
    //fields.SetField("n°1", "value");
    //...
    pdfStamper.Close();
    pdfReader.Close();
}
于 2013-01-24T10:25:58.070 に答える