23

私は iTextSharp を使用して 1 年以上 PDF ドキュメントを生成しています。残念ながら、Adobe Reader X のリリースにより、PDF を保存すると「保存しますか?」というメッセージが表示されるようになりました。PDF ドキュメントを閉じるときに表示されるダイアログ。これは、iTextSharp で生成されていない PDF では発生しません。一日中 PDF ドキュメントを開いたり閉じたりしているユーザーにとっては、本当に迷惑です。これを防ぐために設定できる iTextSharp のプロパティはありますか?

それが役立つ場合、私は PdfReader を使用して既存の PDF ドキュメントからデータを読み取ります (この元のドキュメントでは [保存] ダイアログは表示されません)。次に、PdfWriter を使用して新しいドキュメントを作成し、AddTemplate を使用して元のドキュメントの一部を新しいドキュメントにコピーします。

4

2 に答える 2

28

問題は次の行です。

Response.OutputStream.Write(MS.GetBuffer(), 0, MS.GetBuffer().Length)

GetBuffer メソッドは、実際のコンテンツよりも大きい内部バッファー全体を返します。悪い PDF には最後に約 10kb のガベージ コンテンツ (ゼロのバイト) があり、良い PDF には数バイトのガベージ バイトしかありません。メモリ ストリームの ToArray() メソッドを使用して PDF ファイルを取得すると、問題が修正されます。小さなファイルも取得できます。

byte[] pdf = MS.ToArray();
Response.OutputStream.Write(pdf, 0, pdf.Length);

また、pdf配列の長さで「Content-Length」を設定します。

于 2011-02-25T16:25:32.860 に答える
1

また、追加します

HttpContext.Current.Response.End();

PDFファイルの完成後。

于 2012-08-14T08:31:47.147 に答える