【发布时间】:2016-04-19 16:25:23
【问题描述】:
我在iText in Action一书中关注了创建 PDF 的早期示例。我在一个简单的 ASP.Net Webform 中使用 iTextSharp 来构建 PDF。在 UltraEdit 中查看源代码时,我注意到页面中的 HTML 被嵌入到文件的底部。然后我检查了我们在 iTextSharp 中构建的先前报告,并注意到它在底部嵌入了 HTML 源代码(尽管是压缩格式)。 HTML 不显示在呈现的 PDF 中,只显示源代码。
我试图弄清楚为什么会发生这种情况以及是否有办法阻止它。
在页面上我有一个触发此事件的按钮(最后一个块是在本地下载文档的代码。这不是本书的示例):
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
虽然你可以看到它在最后附加了来自调用页面的 HTML
</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]-->
...
它继续将该页面中的所有 HTML 嵌入文件中。
【问题讨论】:
-
我不记得管道的开始和结束部分了,但你也可以尝试将
Response.Close()扔进去吗?
标签: c# asp.net pdf webforms itextsharp