In reference to an earlier post (PDF Report generation)
I have decided to use a solution similar to http://www.alistapart.com/articles/boom
For those of you who don't want to read either reference - I'm creating a report and need it as a PDF. I've decided to go the HTML -> PDF route using .NET.
So, let's say I get the HTML file exactly like I want it. What is the best way to convert said page to PDF? In essence, I'd like the user to see a "preview" in HTML and then be able to convert said page to PDF. The library I'm currently experimenting with is ABCPdf.
My first thought was to save the page to the filesystem and reference it's URL in the conversion routine during an eventhandler on the page itself. This has it's problems because I'd have to save the page each time it was rendered in preparation to print it. Actually, it just seems backasswards.
My next thought was to use the page's render method to capture the page as a bytestream and use this (since ABCPdf supports converting a stream of HTML.) If this is my answer, I'm lost at how to actual pull it off. Have a "Print" button that's handler does a Me.Render() to bytestream and send that to the conversion routine? Is that even possible?
Bottom line - Once a page is rendered in nice HTML, how do you initialize a conversion to PDF of that page? Workarounds and other solutions are welcome.
I'm hoping I'm missing something obvious as this has got to be "the easy part"
Ok, got it working - and it was fairly simple. Just passing this along to the next guy who might need the answer. I just used the Url property of the page and sent it to the ABCPdf addImageUrl() method. Also had to use chaining since it was more than one page. Thanks for all of the help.
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()
I was in the same situation as you and after evaluating a lot of options including iTextSharp and ABC PDF, I ended up with wkhtmltopdf: http://code.google.com/p/wkhtmltopdf/.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With