HTML到PDF的转换 - 几乎有效,但是

本文关键字:有效 但是 PDF 转换 HTML | 更新日期: 2023-09-27 18:34:03

我花了几天的大部分时间寻找易于使用的库,该库将 html 字符串作为输入,并将 PDF 输出作为文件生成到客户端浏览器。

在我尝试的几十个工具中,一个名为NReco PDF Generator的产品,它是基于wkhtmltopdf的众多衍生工具之一,似乎适合我的需求。

这是我的测试代码:

var strHtml = String.Format("<h1>Hello World!</h1>");
Response.Clear();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=test.pdf");
(new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(strHtml, null, Response.OutputStream);
Response.End();

使用上面的代码,我希望看到一个PDF文件被传递到我的浏览器。相反,我只看到在我的开发人员控制台中生成的输出流。(顺便说一句,我正在使用浏览器)

我的问题不是关于所述产品如何工作,我认为该产品正在按预期工作,而是关于我的代码是否缺少任何操作。NET Response对象或做错了什么。正如我已经指出的,我可以在控制台中看到转换后的 Pdf 流。我认为这只是在文件中捕获该流并将其传递给客户端的问题。

HTML到PDF的转换 - 几乎有效,但是

缺少的行是Response.BinaryWrite(pdfBytes) 。如果没有该行,PDF 将不会呈现给用户。

据我所知,您不需要这些行:

Response.Clear();
Response.ClearHeaders();

以下内容对我有用(显然,您需要添加using NReco.PdfGenerator;

string strHtml = String.Format("<h1>Hello World!</h1");
HtmlToPdfConverter pdfConverter = new HtmlToPdfConverter();
var pdfBytes = pdfConverter.GeneratePdf(strHtml);
Response.ContentType = "application/pdf";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AddHeader("Content-Disposition", "Inline; filename=TEST.pdf");
Response.BinaryWrite(pdfBytes);
Response.Flush();
Response.End();

将 PDF 存储为字节数组,然后将其写入响应。

var pdfBytes = new NReco.PdfGenerator.HtmlToPdfConverter().GeneratePdf(strHtml);
Response.BinaryWrite(pdfBytes);

而不是

(new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(strHtml, null, Response.OutputStream);

灵感来自NReco的网站。