Can anyone recommend a good library for programmatically creating PDF documents from within .NET applications?
Have you looked at http://sourceforge.net/projects/itextsharp/? I have used the Java version on a project and it worked well.
Try PDFsharp and MigraDoc [1], it is an open source PDF creation component written in .NET
[1] http://www.pdfsharp.net/I've used ITextSharp to create PDF's from .net. It is the .net port of the open source IText. It has the capability to create the PDF from scratch. But doing that would require formatting the entire document. Instead I created a PDF Form, then filled in the fields of the form using a small class. The most difficult time I had was figuring out how to get the the filled in form into the actual memory stream. The work of the class is in the following function. I can give more details if someone wants them. The sourceforge url is: http://sourceforge.net/projects/itextsharp/
Public Function GeneratePDF() As IO.MemoryStream
Dim pdfTemplate As PdfReader
Dim stamper As PdfStamper
Dim tempPDF As PdfReader
Dim doc As Document
Dim msTemp As MemoryStream
Dim pCopy As PdfCopy
Dim msOutput As New MemoryStream
pdfTemplate = New PdfReader(m_FormName)
doc = New Document
pCopy = New PdfCopy(doc, msOutput)
doc.Open()
For Each pg As FormPage In FormPages
msTemp = New IO.MemoryStream
pdfTemplate = New PdfReader(m_FormName)
stamper = New PdfStamper(pdfTemplate, msTemp)
For Each fld As FormField In pg.Fields
stamper.AcroFields.SetField(fld.fieldName, fld.fieldValue)
Next
stamper.FormFlattening = True
stamper.Close()
tempPDF = New PdfReader(msTemp.ToArray)
pCopy.AddPage(pCopy.GetImportedPage(tempPDF, pdfTemplate.NumberOfPages))
pCopy.FreeReader(tempPDF)
Next
doc.Close()
Return msOutput
End Function
Just for completeness - if you represent your data in xml, you can apply an xslt to it and run it through nFOP [1], and generate a PDF that way.
[1] http://nfop.sourceforge.net/ComponentOne PDF™ for .NET [1]
Essential PDF [3]
PDF4NET [4]
PDFTechLib [6]
PDFOne .NET [7]
Dynamic PDF [8]
PDFLib [9] - As you can see there are several vendors in this space. I think that it all depends on how you intend to integrate it in your application. For instance a few years a go I developed and application in .Net utilizing PDFLib on account that the client wanted to create a web based application that created design proofs and also provided optimization for their digital print services. Looking back at the project I wish I would have known about Dynamc PDF's suite of products [10].
[1] http://www.componentone.com/SuperProducts/PDFNET/I've been relatively happy with Aspose.PDF [1].
[1] http://www.aspose.com/categories/file-format-components/aspose.pdf-for-.net-and-java/default.aspxThere is also a product called ABCpdf [1] from a company called WebSupergoo. There's a free license available [2] as long as you link back to their site or you can buy a license and not have to link to them. I used the control for a web application which generated forms for a mortgage company and it worked very well.
[1] http://websupergoo.com/abcpdf-1.htmI'm surprised that nobody has mentioned SQL Server Reporting Services [1].
I haven't used it in production, but it has seems to have quite a lot of nice features including a very good GUI report builder, extensibility through .NET, web services (SOAP) and web portal (WWW) interfaces, report generation on a schedule or on demand, report caching, e-mail reports (on demand or schedule) or view on-line, and can render to PDF, HTML, Excel, and Image.
[1] http://www.microsoft.com/Sqlserver/2005/en/us/reporting-services.aspxJust to be complete, often overlook You can actually use office automation and create word 2007 document and save it as PDF. If you are using older word version, you can print it to any PDF printer driver like PDFCreator or JawsPDF.
Not sure if Zack has solidified on anything with this particular need, but I've been working on a way to render RDL files (SSRS Report Files) without the need to deploy SSRS, as I had a few applications where I needed a great reporting format (SSRS Reports), but couldn't expect the end-users to deploy and manage SSRS... Using the 2010 version of the associated libs, you can export in Word, Excel, and PDF, so this should more than fulfill your need.
You can download the source from CodePlex [1].
Word of note: I haven't gotten into subreports to-date, and am looking to do that feature at some point. If anyone is interested in tackling it, please let me know.
[1] http://ssrsviewer.codeplex.com/I'd like to mention RazorTex [1], a small project I just started [2]. It uses a very different approach than most other PDF tools suggested, I believe. Actual PDF creation happens through pdflatex. The 'views' are written using Razor.
Because of LaTeX, this is very powerful in terms of typesetting features and quality, but LaTeX has a steep learning curve. Free.
[1] http://github.com/cmenge/RazorTexYou can also give Telerik Reporting [1] a try. It can export to PDF as well.
[1] http://www.telerik.com/products/reporting/overview.aspxI have tried all of those programs, but none of them worked for what I was doing.
I needed to export a complicated HTML report into a PDF format.
The only tool that I found that actually rendered the report from HTML and accurately rendered it (using the CSS styles, classes, and complicated divs and tables) was a tool called Winnovative HTML to PDF Converter for .NET [1]
[1] http://www.winnovative-software.com/Crystal Reports can be programmed so that it outputs PDF files. Works perfect! I have developed a system that generates about 500 PDF per day for archiving. Crystal Reports even comes with Visual Studio so should be available for most. See example below:
using CrystalDecisions.CrystalReports.Engine;
ReportDocument rptCust;
string sDate_time;
string sDestination_path;
CrystalDecisions.Shared.ExportOptions myExportOptions;
CrystalDecisions.Shared.DiskFileDestinationOptions File_destination;
CrystalDecisions.Shared.PdfRtfWordFormatOptions Format_options;
myExportOptions = new CrystalDecisions.Shared.ExportOptions();
File_destination = new CrystalDecisions.Shared.DiskFileDestinationOptions();
Format_options = new CrystalDecisions.Shared.PdfRtfWordFormatOptions();
sDate_time = DateTime.Now.ToString("ddMMyyyyHHmmssff");
sDestination_path = sDestination_file + sPolicy_number + sPolicy_number1 + "-" + sDate_time + ".pdf";
File_destination.DiskFileName = sDestination_path;
myExportOptions = rptCust.ExportOptions;
myExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;
myExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
myExportOptions.DestinationOptions = File_destination;
myExportOptions.FormatOptions = Format_options;
rptCust.Export();
Docotic.Pdf library [1] may be used to create PDFs in a .NET applications. It also can be used to extract text [2] or images from PDF files and many other things [3].
The library has no external dependencies and is written in C#.
Disclaimer: I work for Bit Miracle.
[1] http://bitmiracle.com/pdf-library/We're using TallPDF from TallComponents [1] and have had great success with it. Not sure what the other libraries uses, but it is using xslt as templates for the pdfs which makes it easy to adjust/update templates on a live server.
[1] http://www.tallcomponents.com/I have had good experiences with PrinceXML. It generates a .PDF from a .HTML file, which sounds like a hack at first, but their rendering engine is very good. Passes acid2 and has good .svg support so you can include vector images instead of bitmaps to keep the .PDF relatively small (which is important when generating reports which need to be sent as an attachment).
Especially if you have in-house designers who speak html/css they will have no trouble at all creating a good looking .pdf, so IMO it's a perfect match if you're doing web applications.
I've used PDFWiter from DbAutotrack. It's dead cheap at $89 and it works like a charm See it here [1]
[1] http://www.dbautotrack.com/products/pdfwriter.htmlWhile probably overkill for the simple task of generating a PDF, ActiveReports [1] has been generating PDFs since 1996 and is a very mature PDF generator. It has many advantages over a simplistic PDF library if you need to add data to your documents, it is interesting to target formats other than PDF, or you want a visual designer. Recently in version 6, we also added advanced PDF features like digital signatures [2] and PDF timestamps [3] in addition to the existing PDF security features [4] (encryption, password, etc.).
[1] http://www.datadynamics.com/activereportsI've used both Syncfusion's EssentialPDF and ceTe's DynamicPDF. Each has capabilities the other does not, so which is best to use for your specific situation depends heavily on what your PDF documents must contain.
I've had good luck with the open source library PDF Clown.
http://www.stefanochizzolini.it/en/projects/clown/
Here is a nice list of commercial solutions: http://www.411asp.net/home/assembly/document/pdf
I've used Report .Net [1] with some success. It's free and the code makes sense to me, which is almost as important.
[1] http://sourceforge.net/projects/report/It would appear there is no shortage of choices.
Microsoft SQL Server Reporting Services can accomplish this [1], and exposes the functionality through an API you can code against.
[1] http://www.google.com/search?hl=en&q=reporting+services+generate+pdf+asp.netExpanding on ActivePDF [1], if you have to make PDF files of Microsoft Office documents and you have a server you can install Microsoft Office on (i.e., a server in the cluster which isn't otherwise Internet connected) then ActivePDF's DocConverter [2] is almost literally the only game in town. It's pretty easy to use and has lots of .NET assemblies to work with.
[1] http://www.activepdf.com/I like to use GhostScript. It lets you convert PostScript files to PDF format. Plus it is free to use at no charge.
I've also used DynamicPDF and it is an excellent product. Very easy to use, and it has a very object-oriented structure. It impressed the hell out of me. It has a boatload of features, including the ability merge together multiple PDF documents.
It's not free, but I think you should check out the trial.
Regards...
I've been using iTextSharp coupled with Adobe LiveCycle Designer. Its very simple and easy to use. I have an entry on my blog about it - http://jesal.us/blog/index.php/2008/10/10/create-pdf-forms-using-itextsharp/
I have used Dynamic PDF with very good results thus far.
PDF Duo .Net [1] is a small but very effective component for converting HTML to PDF.
[1] http://www.duodimension.com/html%5Fpdf%5Fasp.net/component%5Fhtml%5Fpdf.aspxI've been using ActivePDF [1] for years and it seems to be very stable and quite powerful. Simply draw out your fields in Acrobat pro and programmatically prefill them with text, images, just about anything.
[1] http://www.activepdf.com/products/serverproducts/toolkit/index.cfmWe use DynamicPDF from CeTe (http://www.cete.com/). You can use this to either render a PDF from scratch, or pull pages of content in from an existing PDF and draw over the top.
It also has a report designer that you can use with some data binding features to help automate things a little (although I haven't actually tried that bit yet!).
It's been quite simple to use and pretty trouble-free to date.
The company that I work for is using Rubika from Solimar Systems. I believe that they also use itextsharp in there "PDFEngine". We create hundreds of pdfs with thousands of pages per month with this software.
If you're going to use iTextSharp (or its original Java incarnation, iText), you owe it to yourself to find a copy of iText In Action: Creating and Manipulating PDF [1] by Bruno Lowagie, the creator of iText. It's very well-written and contains great explanations for why PDF does things the way it does. (I have no financial interest; I just thought it was one of the better-written technical books I've read.)
[1] http://www.1t3xt.com/docs/book.phpI haven't used it myself, but I've heard good things about Prince [1]. There's a .Net interface available for it.
[1] http://www.princexml.com/overview/If you don't want to mess around in all the "PDF dirt" yourself then PDFTron [1] is prety good. One draw back it is not free, although it is an easy to use .Net PDF library that will get you up and running quickly.
[1] http://www.pdftron.com/We're using pdftron. works. not free.
I highly recommend Ibex PDF Creator [1] from Visual Programming Limited. It uses standard XML:FO to create high-quality PDF documents. The libary has many features, and the vendor provides excellent support. The tool is licensed per developer so you can redistribute it without any licensing concerns.
[1] http://www.xmlpdf.com/PDFLib - I have not found PDF feature that could not be generated using PDFLib. OTOH I have not found a PDFLib feature that I could use without reading the documentation twice.
WebToPDF.NET [1] does a very good job at converting HTML/CSS to PDF. In fact we pass about 97% of the W3C CSS 2.1 Test Suite which is a rarely seen high conformance level amongst HTML to PDF converters (except for Prince).
Disclosure: I am affiliated with TallComponents, the vendor of the component
[1] http://www.tallcomponents.com/webtopdf1We use WPCubed PDF Control [1] to build our pdfs. It's very simple to use and works well. There is an evaluation version [2] available to download too.
[1] http://www.wpcubed.com/products/pdfcontrol/index.htm