iTextSharp 5.3.2.0を使用して、W-2フォームを含む既存のPDFファイルに情報を追加しています。すべてが完全に機能しており、ブラウザの応答ストリームに書き込むとPDFファイルは見栄えがします。ただし、ユーザーがPDFの表示を終了すると、「閉じる前に「W2.pdf」への変更を保存しますか?」というメッセージが表示されます。彼がWebページからドキュメントを表示するたびに。
問題を絞り込もうとして、実際にすべての変更を削除しましたが、問題は解決しません。これが私のコードの単純なバージョンで、データ書き込みの呼び出しがコメントアウトされています。
PdfReader pdfReader = new PdfReader(dataSource.ReportTemplate);
using(MemoryStream outputStream = new MemoryStream())
using (PdfStamper pdfStamper = new PdfStamper(pdfReader, outputStream))
{
//dataSource.DrawDataFields(pdfStamper);
pdfStamper.FormFlattening = true;
return outputStream;
}
この場合、「空の」PDFはブラウザに書き込まれ、見栄えがしますが、Acrobatウィンドウを閉じると、「保存しますか」というメッセージが表示されます。
この時点で、ソースPDFファイルに何か問題があると思っていました。ただし、PDFファイルの生のバイトをブラウザに送り返すときに、以下のコードを使用するときに「保存しますか」という質問は表示されません。
byte[] bytes = File.ReadAllBytes(dataSource.ReportTemplate);
using (MemoryStream outputStream = new MemoryStream())
{
outputStream.Write(bytes, 0, bytes.Length);
return outputStream;
}
私の結論は、iTextSharpは、PDFを開いてストリームにバイトを書き込む過程で、PDFに対して「悪い」ことをしているということですが、私はiTextSharpを初めて使用するため、簡単に何かを見逃してしまう可能性があります。
FWIW、これは私たちが話しているAcobatReader10.1.4です。
編集:テンプレートとして使用される元のPDFのサイズは約80Kです。ブラウザからストリーミングされた一時ファイルを見ると、iTextSharpによって書き込まれたPDFファイルは約150Kです。ただし、Acrobat Readerからの「変更の保存」の質問に「はい」と答えると、結果のファイルは再び約80Kになります。iTextSharpは間違いなくこのファイルに予期しないことをしています。