2016-04-19 18 views
1

書籍のiText in ActionにPDFを作成する初期の例に従っています。私は単純なASP.Net WebformでiTextSharpを使用してPDFを構築しています。 UltraEditでソースを見ると、ページのHTMLがファイルの最後に埋め込まれていることがわかりました。 iTextSharpで作成した以前のレポートを確認し、HTML形式のソースが(圧縮された形式ではあるが)下部に埋め込まれていることに気づいた。 HTMLはレンダリングされたPDFには表示されず、ソースのみが表示されます。HTMLがpdfソース(iTextSharp)に埋め込まれています

私はこれがなぜ起こっているのか、それを止める方法があるかどうかを調べようとしています。ページで

私は(これの最後のブロックはローカルドキュメントのダウンロードを持っているコードです。これは、本の中の例ではありません。)このイベントをトリガーするボタンがあります。

protected void BtnSamplePDF_Click(object sender, EventArgs e) 
     { 
      using (var memStream = new MemoryStream()) 
      { 
       var document = new Document(); 
       var writer = PdfWriter.GetInstance(document, memStream); 
       document.SetPageSize(PageSize.A5); 
       document.SetMargins(36, 72, 108, 180); 
       document.SetMarginMirroringTopBottom(true); 

       document.Open(); 

       PdfContentByte canvas = writer.DirectContentUnder; 
       writer.CompressionLevel = 0; 
       canvas.SaveState(); 
       canvas.BeginText(); 
       canvas.MoveText(36, 788); 
       canvas.SetFontAndSize(BaseFont.CreateFont(), 12); 
       canvas.ShowText("Hello World"); 
       canvas.EndText(); 
       canvas.RestoreState(); 

       document.Close(); 

       string fileName = "attachment;filename=" + "practice.pdf"; 
       Response.ContentType = "application/pdf"; 
       Response.AddHeader("Content-Disposition", fileName); 
       Response.BinaryWrite(memStream.ToArray()); 
       Response.OutputStream.Flush(); 
       Response.OutputStream.Close(); 
      } 
     } 

PDFソースは、あなたがそれを呼び出しページ

</Size 7/Root 5 0 R/Info 6 0 R/ID [<aff0a4a6eb7e3827497db957aaef3eb3><aff0a4a6eb7e3827497db957aaef3eb3>]>> 
%iText-5.5.1 
startxref 
620 
%%EOF 


<!DOCTYPE html> 
<!--[if IE 8]>   <html class="no-js lt-ie9" lang="en"> <![endif]--> 
<!--[if gt IE 8]><!--> 
<html class="no-js" lang="en"> 
<!--<![endif]--> 
... 
0からHTMLを追加していることがわかりますけれども最後には、一般的なヘッダ

%PDF-1.4 
%âãÏÓ 
2 0 obj 
<</Length 81/Filter/FlateDecode>>stream 

で始まります

このページのすべてのHTMLがファイルに埋め込まれています。

+1

パイプラインの開始部分と終了部分がもう覚えていませんが、そこに 'Response.Close()'を投げても構いませんか? –

答えて

0

あなたのBtnSamplePDF_Clickはページのポストバックを行います。残りのコードロジックは問題ありませんが、ページのレンダリングが要求されているので、その結果が得られます。

バイトを返すハンドラ(ashx)を呼び出すようにコードを変更した場合、そのコードは機能します。

関連する問題