HTML嵌入在pdf源代码中(iTextSharp)

时间:2016-04-19 16:25:24

标签: c# asp.net pdf webforms itextsharp

我正在关注 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嵌入到文件中。

1 个答案:

答案 0 :(得分:0)

您的BtnSamplePDF_Click将进行一个页面回发 - 其余的代码逻辑很好,但是当要求呈现页面时,您将获得这些结果。

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