私は 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 を使用して動作させる方法はありますか?