【问题标题】:Convert HTML to PDF将 HTML 转换为 PDF
【发布时间】:2010-12-31 04:34:33
【问题描述】:

参考之前的帖子 (PDF Report generation)

我决定使用类似于http://www.alistapart.com/articles/boom的解决方案

对于那些不想阅读任何参考资料的人 - 我正在创建一份报告并需要它作为 PDF 格式。我决定使用 .NET 走 HTML -> PDF 路线。

所以,假设我得到了完全符合我要求的 HTML 文件。将所述页面转换为 PDF 的最佳方法是什么?本质上,我希望用户在 HTML 中看到“预览”,然后能够将所述页面转换为 PDF。我目前正在试验的库是 ABCPdf。

我的第一个想法是将页面保存到文件系统并在页面本身的事件处理程序期间在转换例程中引用它的 URL。这是有问题的,因为每次呈现页面以准备打印时,我都必须保存页面。实际上,这似乎是一种反击。

我的下一个想法是使用页面的渲染方法将页面捕获为字节流并使用它(因为 ABCPdf 支持转换 HTML 流。)如果这是我的答案,我不知道如何实际提取它离开。有一个“打印”按钮,它的处理程序执行 Me.Render() 到字节流并将其发送到转换例程?这可能吗?

底线 - 一旦页面以漂亮的 HTML 呈现,您如何初始化该页面到 PDF 的转换?欢迎使用变通方法和其他解决方案。

我希望我遗漏了一些明显的东西,因为这必须是“简单的部分

【问题讨论】:

  • 另外,我正在考虑将页面的 HTML 模板保存在数据库中并以编程方式填写数据。这样,我就有了可以做任何我想做的事情的 HTML(渲染到屏幕或转换)

标签: .net html pdf pdf-generation abcpdf


【解决方案1】:

好的,开始工作了——而且相当简单。只需将其传递给下一个可能需要答案的人。我只是使用了页面的 Url 属性并将其发送到 ABCPdf addImageUrl() 方法。还必须使用链接,因为它不止一页。感谢大家的帮助。

Dim oPdfDoc As New Doc()
Dim iPageID As Int32
Dim MyUrl = Request.Url

iPageID = oPdfDoc.AddImageUrl(MyUrl.AbsoluteUri)

While True
    oPdfDoc.FrameRect()
    If Not oPdfDoc.Chainable(iPageID) Then
        Exit While
    End If
    oPdfDoc.Page = oPdfDoc.AddPage()
    iPageID = oPdfDoc.AddImageToChain(iPageID)
End While

For i as Int32 = 1 To oPdfDoc.PageCount
    oPdfDoc.PageNumber = i
    oPdfDoc.Flatten()
Next

oPdfDoc.Save(Server.MapPath("test.pdf"))
oPdfDoc.Clear()

【讨论】:

    【解决方案2】:

    我的情况和你一样,在评估了包括 iTextSharp 和 ABC PDF 在内的很多选项后,我最终选择了 wkhtmltopdf:http://code.google.com/p/wkhtmltopdf/

    【讨论】:

      【解决方案3】:

      你如何从 C# 中做到这一点?你不(直接)。

      生成一个工作 PRINCE.EXE 进程可能是您唯一的选择。

      PRINCE.EXE 将从 HTML“标准输入”读取/写入数据并将 PDF 发送到“标准输出”。使用不带输出文件名的命令行“%dir%\PRINCE -”。

      您可能会发现您需要一个单独的 COM 组件来生成 PRINCE,因为 System.Management 类可能不适合您。使用 Visual Basic 或 C++ 制作您的 COM 组件。

      将 HTML 放入数据库通常是个坏主意,但在您的情况下可能没问题,因为它听起来本质上是静态的。

      编辑

      将“子 PRINCE.EXE”更改为“工作 PRINCE.EXE 进程”。我有一种有趣的感觉,PRINCE.EXE 不需要是子进程。

      【讨论】:

        猜你喜欢
        • 2011-09-02
        • 1970-01-01
        • 2016-12-01
        • 2014-11-16
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多