【问题标题】:HTML is being embedded in pdf source (iTextSharp)HTML 被嵌入 pdf 源代码 (iTextSharp)
【发布时间】: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


【解决方案1】:

您的 BtnSamplePDF_Click 将执行页面回发 - 您的代码逻辑的其余部分都很好,但是由于要求呈现页面,所以您会得到这些结果。

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

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 2014-12-31
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2014-12-16
    • 1970-01-01
    相关资源
    最近更新 更多