从HTML导出为PDF(C#)

11

可能是重复问题:
在.NET中将HTML转换为PDF

我们的应用程序中,我们将HTML文档作为报告和导出使用。但现在我们的客户想要一个按钮,可以将该文档保存到他们的计算机上。问题在于文档包括图像。 您可以使用以下代码创建Word文档:

private void WriteWordDoc(string docName)
{
    Response.Buffer = true;
    Response.ContentType = "application/msword";
    Response.AddHeader("content-disposition", String.Format("attachment;filename={0}.doc", docName.Replace(" ", "_")));
    Response.Charset = "utf-8";
}

但问题是这些图片只是链接,因此没有嵌入到Word文档中。

因此,我正在寻找另一种选择。PDF似乎是一个不错的选择,有人知道一个好的C# PDF编写器吗?需要具备一些良好的参考资料并经过适当的测试。


2
请注意,您所做的并不是创建一个Word文档。您只是滥用了Word的“功能”,以便能够打开一个即使被伪装成“.doc”文件的HTML文档。 - Ondrej Tucny
9个回答

5
我建议在服务器上创建PDF文件。有许多产品可以做到这一点,但您应该考虑以下情况,并研究最适合您情况的产品:
  • 创建PDF所需的计算机资源。如果是复杂文档,则可能需要太长时间或会减缓其他用户的响应速度。
  • 需要此相同功能的并发用户数量
  • 成本(有免费解决方案以及重型商业产品)。
我不建议使用Word格式,因为PDF将为您提供更多保证,使其在未来可读。
此外,将硬链接嵌入图像的选项对我来说似乎不是一个好主意。如果用户想要打开文档而服务器无法访问怎么办?

4
您有一个更大的问题...保存生成的文件是浏览器的特权。即使您设置了内容类型,浏览器处理任何特定文件流的方式完全取决于浏览器本身。您最好的选择可能是使用类似ABCpdf的工具将HTML /图像转换为PDF格式。我在使用他们的软件时运气不错,而且他们的支持也相当不错。当然,这是一个第三方工具,您需要安装它。如果没有这样做,您下一个最好的选择可能是创建包含HTML、图像和其他文件(CSS、JavaScript?)的zip文件...但这需要相当多的后端逻辑。

一些浏览器已经内置了此功能。您可以要求用户使用该功能。:)


那是我唯一有经验的工具。过去我曾寻找替代品,但ABCpdf几乎是当地独一无二的选择。这是一个有点小众的工具。 - Bryan
我使用的是doPDF,它通过模拟打印机工作。这样就不会丢失任何格式。 - Mauricio

3
开源PDF流生成.NET程序集:http://sourceforge.net/projects/itextsharp/ 一旦你掌握了它,你将永远不会再使用任何第三方工具或者在服务器上进行IO操作并占用空间来创建临时文件。

我还没有尝试过,但我喜欢你的观点。 - Luka Ramishvili

2

ExpertPDF可以将HTML转换为PDF(包括图像),对于渲染复杂布局表现良好。内部使用托管的IE副本来进行HTML渲染,然后再将其转换为PDF。这意味着该组件无法在Linux上的Mono中使用,并且它还意味着IE的怪癖会影响你的PDF效果。不过,通过CSS的page-break-before等属性你可以控制分页。


1
ExpertPDF的9.0版本及以上(于2013年12月发布)现在使用WebKit引擎,因此IE不再是一个问题。 - Theophilus

2

我喜欢使用DocRaptor.com来创建PDF文档。它是一个网络应用程序,可以在任何语言中使用,并且使用Prince XML,因此结果具有高质量。


2

您需要为图像提供互联网上某个可用位置的绝对链接。

一旦文档加载到Word中,将“HTML”文档保存为MSWord文档,应该包括图像(或者可能有一个选项?)。


你的另一个选择是使用VSTO工具,但我以前从未使用过它。 - leppie

0

我也遇到了同样的问题,但还没有解决它,因为我们决定导出一个“无图像”的文档,因为一开始就没有任何图片。

然而,在寻找问题的过程中,我发现了这篇文章,介绍了如何使用XSLT导出文档。虽然我还没有找到时间去解决它,但也许你可以试试。


0

微软推出了一种新的页面描述格式“XPS”,可以通过WPF编程模型简单生成,无论是在服务器端还是客户端。类似于PDF阅读器的XPS阅读器应用程序,允许用户查看和打印XPS文档。还有一个简单的API可以生成XPS文档。


0

尝试使用PDF Duo .Net组件,将HTML转换为字符串|文件|URL|流的PDF。 这是一个小而非常有效的库,您可以在ASP.NET应用程序中使用它。

在其页面上查找ASP.NET C#示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接