我正在关注 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嵌入到文件中。
答案 0 :(得分:0)
您的BtnSamplePDF_Click将进行一个页面回发 - 其余的代码逻辑很好,但是当要求呈现页面时,您将获得这些结果。
如果您更改代码以便调用处理程序(ashx)返回一个字节[],那么它将起作用。