0

私は iTextSharp を使用して PDF フォームに記入しようとしていましたが、ブロックに新しい子供がいることがわかりました: iText 7.0. 当然やってみたのですが・・・残念ながらうまくいきませんでした。ここに問題があります。プログラムで入力する必要がある編集可能な PDF フォームがあります。私はそれを達成するために次のコードを使用しました:

string srcPdfFormPath = @"<Path to source pdf form>";
string destPdfFormPath = @"<Path to destination pdf form>";
using (PdfDocument pdfDocument = new PdfDocument(reader, new PdfWriter(destPdfFormPath)))
{
    PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDocument, true);

    var fieldName = "FullName";
    var pdfField = form.GetField(fieldName);
    if (pdfField != null)
        pdfField.SetValue("John Doe", null);
    else
        Debug.WriteLine($"Cannot find following field {fieldName } on pdf form.");

    pdfDocument.Close();
}

目的のフィールドが入力されましたが、フォームが平坦化されただけでなく (AFAIK では予期された動作ではありません)、入力された PDF が Acrobat リーダーで開かれると、次のメッセージが生成されます。

「このドキュメントは、Adobe Acrobat Reader DC の拡張機能を有効にしました。ドキュメントは作成後に変更されたため、拡張機能は使用できなくなりました。このドキュメントの元のバージョンについては、作成者にお問い合わせください。」

これらの結果は、私たちが目指してきたものではありません。そこで、ドキュメントの編集可能性を維持し、厄介なメッセージを取り除くために、「追加モード」で PDF フォームを開くことにしました。これが私が使用したコードです:

string srcPdfFormPath = @"<Path to source pdf form>";
string destPdfFormPath = @"<Path to destination pdf form>";
using (PdfDocument pdfDocument = new PdfDocument(reader, new PdfWriter(destPdfFormPath)
                         , new StampingProperties().UseAppendMode()))
{
    PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDocument, true);

    var fieldName = "FullName";
    var pdfField = form.GetField(fieldName);
    if (pdfField != null)
        pdfField.SetValue("John Doe", null);
    else
        Debug.WriteLine($"Cannot find following field {fieldName } on pdf form.");

    pdfDocument.Close();
}

残念ながら、この試みもその使命に失敗しました。厄介なメッセージは表示されなくなりますが、フォーム自体は入力されないため、受け入れられません。そして、私の人生では、なぜこれらの行動が持続し、馬と馬車のように一緒に行くのか理解できませんでした!

質問は次のとおりです。ここで何が欠けていますか? 新しいバージョンの iText を使用して動作させる方法はありますか?

4

0 に答える 0