5

参考较早的帖子(PDF报告生成

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

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

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

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

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

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

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

4

3 回答 3

3

好的,让它工作 - 它相当简单。只需将其传递给下一个可能需要答案的人。我只是使用了页面的 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()
于 2010-01-04T03:51:59.093 回答
1

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

于 2010-01-22T09:21:14.503 回答
-2

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

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

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

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

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

编辑

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

于 2009-12-30T18:35:23.377 回答