11

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

在我们的应用程序中,我们将 html 文档作为报告和导出。但是现在我们的客户想要一个按钮来将该文档保存在他们的 PC 上。问题是文档包含图像。您可以使用以下代码创建一个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 编写器吗?一个有一些很好的参考资料并且已经过正确测试的?

4

9 回答 9

5

我会选择在服务器上创建一个 PDF 文件。有许多产品可以这样做,但您应该研究最适合您的情况的产品,考虑以下几点:

  • 创建 PDF 所需的计算机资源。如果它是一个复杂的文档,它可能会花费太长时间或者减慢对其他用户的响应。
  • 需要相同功能的并发用户数
  • 成本(有免费的解决方案以及重量级的商业产品)。

我不会依赖 Word 格式,因为 PDF 会为您提供更多保证,确保它在未来可以阅读。

此外,将硬链接嵌入图像的选项对我来说似乎不是一个好主意。如果用户想要打开文档而服务器无法访问怎么办?

于 2009-02-26T09:55:01.230 回答
4

你有一个更大的问题......保存生成的文件是浏览器的特权。浏览器如何处理任何特定的文件流,即使您设置了内容类型,也完全取决于浏览器。您最好的选择可能是使用 ABCpdf 之类的东西将 HTML/图像转换为 PDF。我在他们的软件上很幸运,他们得到了不错的支持。当然,这是您必须安装的第三方工具。如果不这样做,您的下一个最佳选择可能是使用图像和其他文件(CSS、javascript?)创建 HTML 的 zip……但这需要相当多的后端逻辑。

某些浏览器内置了此功能。您可以要求您的用户使用它。:)

于 2009-02-26T09:57:33.440 回答
3

开源pdf流生成.net程序集:http: //sourceforge.net/projects/itextsharp/

一旦掌握了窍门,您将永远不会使用任何 3rd 方#%$^# 或阻塞您的服务器执行 IO 并再次占用临时文件的空间。

于 2010-06-16T18:48:30.457 回答
2

您必须将图像提供到 Internet 上某个可用位置的绝对链接。

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

于 2009-02-26T09:47:59.220 回答
2

ExpertPDF在将 HTML 转换为 PDF(包括图像)方面做得不错。在内部,它使用 IE 的托管副本在转换 HTML 之前呈现 HTML,这意味着该组件不适用于 Linux 上的 Mono,这意味着 IE 的怪癖是您的 PDF 的怪癖。也就是说,它在呈现适度复杂的布局方面做得很好,您可以使用 CSS page-break-before 等来控制分页。

于 2009-11-11T01:11:00.723 回答
2

我喜欢DocRaptor.com创建 pdf。这是一个适用于任何语言的 Web 应用程序,它使用 Prince XML,因此结果质量很高。

于 2011-01-19T01:38:30.290 回答
0

我遇到了同样的问题,但没有解决它,因为我们决定导出“无图像”文档,因为它首先没有任何图像。

然而,当我搜索问题时,我遇到了这篇文章,关于如何使用 XSLT 导出文档。我还没有找到时间来研究它,但也许你可以尝试一下

于 2009-02-26T09:55:45.067 回答
0

MS 有一个新的页面描述格式“XPS”,可以简单地从 WPF 编程模型生成,无论是在服务器上还是在客户端上。有一个 XPS 阅读器应用程序,如 PDF 阅读器,允许用户查看和打印 XPS 文档。有一个简单的 API 可以生成 XPS 文档。

于 2009-02-26T10:13:46.520 回答
0

试用PDF Duo .Net组件,将 HTML 转换为 PDF 到/从字符串 | 文件 | 网址 | 溪流。它是一个小型但非常有效的库,您可以在 ASP.NET 应用程序中使用它。

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

于 2009-08-06T08:22:41.067 回答