HTML 正在嵌入 pdf 源 (iTextSharp)

HTML is being embedded in pdf source (iTextSharp)

我正在学习 iText in Action 一书中创建 PDF 的早期示例。我在一个简单的 ASP.Net 网络表单中使用 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 源以典型的 headers

开头
%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 都嵌入到文件中。

您的 BtnSamplePDF_Click 将执行页面回发 - 您的其余代码逻辑没有问题,但由于要求呈现页面,因此您将获得这些结果。

如果您更改代码以便调用处理程序 (ashx) 返回一个字节[],它将起作用。