2016-04-19 53 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),它就可以工作。