2016-04-19 93 views
1

我正在關注在書中創建PDF的早期示例iText in Action。我在簡單的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格式源與典型的頭

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

在年底開始。雖然你可以看到它從調用頁面

</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

它繼續將該頁面的所有HTML嵌入到文件中。

+1

我不記得管道的哪些部分開始和結束了,但是你可以在那裏嘗試拋出'Response.Close()'嗎? –

回答

0

您的BtnSamplePDF_Click將執行頁面回發 - 您的代碼邏輯的其餘部分沒有問題,但是當頁面被要求渲染時,您將獲得這些結果。

如果您更改了代碼,以便您調用返回字節[]的處理程序(ashx),它就可以工作。