参考较早的帖子(PDF Report generation)
我决定使用类似于http://www.alistapart.com/articles/boom
的解决方案对于那些不想阅读任何参考文献的人 - 我正在创建一个报告,需要它作为PDF。我决定去HTML - >使用.NET的PDF路线。
所以,让我说我得到的HTML文件就像我想要的那样。将所述页面转换为PDF的最佳方法是什么?本质上,我希望用户在HTML中看到“预览”,然后能够将所述页面转换为PDF。我正在尝试的库是ABCPdf。
我的第一个想法是将页面保存到文件系统,并在页面本身的事件处理程序中引用转换例程中的URL。这有它的问题,因为我必须在每次渲染时保存页面以准备打印它。实际上,这似乎是后退的。
我的下一个想法是使用页面的渲染方法将页面捕获为字节流并使用它(因为ABCPdf支持转换HTML流。)如果这是我的答案,我迷失了如何实际拉它关闭。有一个“打印”按钮,处理程序将Me.Render()转换为字节流并将其发送到转换例程?这甚至可能吗?
底线 - 一旦页面以精美的HTML呈现,您如何初始化该页面的PDF转换?欢迎使用变通方法和其他解决方案。
我希望我错过一些明显的东西,因为这必须是“轻松的部分”
答案 0 :(得分: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 :(得分:1)
我和你的情况相同,在评估了很多选项,包括iTextSharp和ABC PDF后,我最终得到了wkhtmltopdf:http://code.google.com/p/wkhtmltopdf/。
答案 2 :(得分:-2)
你是怎么用C#做的?你没有(直接)。
产生一个工人PRINCE.EXE过程可能是你唯一的选择。
PRINCE.EXE将从HTML“标准输入”读取/写入数据,并将PDF发送到“标准输出”。使用命令行“%dir%\ PRINCE - ”,没有输出文件名。
您可能会发现需要一个单独的COM组件来生成PRINCE,因为System.Management类可能不适合您。使用Visual Basic或C ++制作COM组件。
将HTML放在数据库中通常是一个坏主意,但在您的情况下可能没问题,因为它听起来基本上是静态的。
修改
将“child PRINCE.EXE”更改为“worker PRINCE.EXE进程”。我有一种有趣的感觉,PRINCE.EXE不需要是一个子进程。