将HTML转换为PDF

5

参考之前的文章 (PDF报表生成)

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

对于那些不想阅读这个参考的人们 - 我正在创建一个报告,并需要将其作为PDF文件。 我决定使用.NET进行HTML -> PDF转换。

所以,假设我已经完全满意HTML文件。 什么是将该页面转换为PDF最佳方法? 实质上,我希望用户在HTML中看到“预览”,然后能够将该页面转换为PDF。 我目前正在尝试的库是ABCpdf。

我的第一个想法是将页面保存到文件系统并在转换例程中引用其URL。 这样做存在问题,因为每次准备打印它时都必须保存该页面。 实际上,它似乎很奇怪。

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

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

我希望我错过了一些明显的东西,因为这必须是“最容易的部分


1
此外,我正在考虑将页面的 HTML 模板保存在数据库中,并通过编程填入数据。这样,我就有了可以随意处理的 HTML(渲染到屏幕或转换)。 - IniTech
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()

1

-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不应该是子进程。


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