>> Download Example project (VS 2005)
In this article I will show you the results of my search to find a way to print a pdf with .NET.
My task was to find a simple solution for an intranet web application where the user gets pdf reports (ActiveReports). Depending on configuration settings these pdf files should be displayed in the browser and be printed immediately or just be printed immediatly – to the default printer or to a known network printer.
The existing solution was based on the pdf browser plugins. But it was not satisfactory because the user had to do the following steps: view the pdf file in the browser (pdf browser plugin), click the print button, handle the printer dialog popup, click the OK button to send the document to the printer. And some users had to do this more then one hundred times a day. And some users had to do this more than a hundred times a day!
My (more than revolutionary
idea was, that I may need the pdf browser plugin for viewing pdf files, but not for printing them! So I tried different ways, which I wanted you to show now – I did not bring all of them to an end, as some turned out to be inappropriate for my intentions very soon.
Important: these solutions are only making sense if you want to print to a known printer (like in intranets) – they will not work on normal, “public” web sites.
You can download the sample project and do your own experiments. Here is a screenshot of the sample project:
My results:
- Printing a pdf with Ghostscript
- Printing a pdf with windows shell command
- Printing a pdf with PrintDocument object
- Printing a pdf with PDFsharp
- Printing a pdf with Acrobat Reader command line
1. Printing a pdf with Ghostscript
First you have to install Ghostscript, an interpreter for the PostScript language and for PDF. Code:
ProcessStartInfo psInfo = new ProcessStartInfo();
psInfo.Arguments = String.Format(" -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sDEVICE=ljet4 -sOutputFile=\"\\\\spool\\{0}\" \"{1}\"", printerName, pdfFileName);
psInfo.FileName = @"C:\Program Files\gs\gs8.70\bin\gswin32c.exe";
psInfo.UseShellExecute = false;
Process process = Process.Start(psInfo);
2. Printing a pdf with windows shell command
This is another version I found on the web. The code uses the print/printto command of the DOS shell. In the example project, which you can download above, there are two versions of parameters in the code. I never got it work, but I think, it cannot be done: you cannot print a pdf file via shell – but it will work with raw text files. Please tell me your results!
Try this in your DOS prompt:
print /D:"\\COMPUTERNAME\PRINTERNAME" "PDFFILEPATH"
For those who want to try it themselves
ProcessStartInfo psInfo = new ProcessStartInfo();
psInfo.Verb = "Print"; // or "PrintTo"
psInfo.FileName = pdfFileName;
psInfo.Arguments = String.Format("/p /h \"{0}\" \"{1}\"", pdfFileName, printerName);
psInfo.WindowStyle = ProcessWindowStyle.Hidden;
psInfo.CreateNoWindow = true;
psInfo.UseShellExecute = true;
Process process = Process.Start(psInfo);
3. Printing a pdf with PrintDocument object
Using the .NET object PrintDocument is another possible way, but you will need third party components to raster the pdf. More information: >>Component for rendering pdf documents
PrintDocument pd = new PrintDocument(); pd.DocumentName = pdfName; pd.PrinterSettings.PrinterName =printerName; pd.PrinterSettings.PrintFileName = fileName; pd.PrintController = new StandardPrintController(); pd.OriginAtMargins = false; pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage); pd.Print();
4. Printing a pdf with PDFsharp
PDFsharp is an open source .NET library for processing PDF. You can use it for printing too. Simple usage, but the problem here: the AdobeReader application window appears (not suitable for my intentions). But I found out that you do not need PDFsharp to print out a pdf – see chapter 5
PdfFilePrinter.AdobeReaderPath = @"C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" PdfFilePrinter printer = new PdfFilePrinter(pdfFileName, printerName); printer.Print();
5. Printing a pdf with Acrobat Reader command line
This was the best way for me! Although I’ve read that this only works with old versions of Acrobat Reader, it works with version 9.0!
A word to the arguments:
print it to the default printer: /s /o /h /p “pdfFileName”
print it to a defined printer: /s /o /h /t “pdfFileName” “printername” “drivername” “portname”
More information at the Adobe Acrobat Developer FAQ on page 27!
To download the free acrobat reader use this link: Acrobat Reader
ProcessStartInfo psInfo = new ProcessStartInfo();
psInfo.FileName = @"C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe";
psInfo.Arguments = String.Format("/s /o /h /p{0}", pdfFileName);
psInfo.WindowStyle = ProcessWindowStyle.Hidden;
psInfo.CreateNoWindow = true;
psInfo.UseShellExecute = true;
Process process = Process.Start(psInfo);

Martin Zeller
descargar msn
on Feb 10th, 2010
@ 20:04:
Thanks for the tip, Keep up the great work.
Sherly Luangamath
on Feb 12th, 2010
@ 23:01:
Very informative text. I’ve found your blog via Bing and I’m really happy about the information you provide in your posts. Btw your sites layout is really messed up on the Chrome browser. Would be great if you could fix that. Anyhow keep up the good work!
Rogelio Contorno
on Feb 21st, 2010
@ 06:30:
Good Job on the articles you have here, thank you for putting your time into it!
sandra
on Feb 27th, 2010
@ 12:41:
5. Printing a pdf with Acrobat Reader command line
what i should download inorder to be able to use it?
Martin Zeller
on Feb 27th, 2010
@ 13:39:
Hi Sandra,
just download the acrobat reader:
http://get.adobe.com/reader/
Good luck
Martin
sandra
on Feb 27th, 2010
@ 16:54:
hi martin
thank u about ur answer
in fact i have visual studio 2008 and its give me error
can u help me?
my q2- i should get license for ur article or any files … DLL ..etc that included in ur project ? or all of them are open source?
Martin Zeller
on Feb 27th, 2010
@ 17:03:
Hi Sandra,
The only third party dll I am using in the example project is from pdfsharp. You can download and check other regarding stuff at the pdfsharp homepage:
http://www.pdfsharp.com/PDFsharp/
(It is open source!)
I cannot help you with VS2008, I am still using VS2005.
sandra
on Feb 27th, 2010
@ 20:21:
hi martin
thank u alot about ur reply
i have download PDFSharp
but i dont know how to use it in asp.net ( ididnt see any PDFSharp.DLL)
if u can help me i will be happy , and if u cant thank u alot
sandra
on Feb 27th, 2010
@ 21:36:
hi,
thank u alot about answering
i have download pdfsharp,
but when i want to add this to my asp.net application , ididnt any PDFSharp.DLL
can u tell me the steps in order to be able to use it in asp.net ?
thx
Martin Zeller
on Feb 27th, 2010
@ 22:03:
Hi Sandra,
just use this link to download the zip file with the assemblies – there you will find the dll:
http://sourceforge.net/projects/pdfsharp/files/
Martin
Andelia
on Mrz 10th, 2010
@ 10:52:
Hi.I like reading your post , keep doing it.
jack parler
on Mai 13th, 2010
@ 02:31:
Very good information.
Vijin N
on Jun 6th, 2010
@ 11:23:
I got error using Javscript function.How to solve below error
ERROR: Automation server can’t create object
Gallardo Fan
on Dez 7th, 2010
@ 10:38:
Frohe Weihnachten und ein gutes neues Jahr verbunden mit Dank fuer die vertrauensvolle Zusammenarbeit. Merry Christmas and a Happy New Year with thanks for your faithful cooperation. Mit besten Wuenschen zu Weihnachten und das neue Jahr. With best wishes for Christmas and the New Year.
ansar
on Jan 7th, 2011
@ 13:28:
Hi ,
i want to use 5th step but the problem here is you have mentioned this is version specific. used only below versions less than Acrobat reader 9.0 . what command I have to use for greater than 9.0 versions . Any help would be great thanks in advance
Martin Zeller
on Jan 7th, 2011
@ 13:36:
Hi ansar,
my way works with versions less than or equal 9.0 – I never tried other versions. Maybe it still works!
If it works, ansar, please, let me know.
Kind regards
Martin
ansar
on Jan 7th, 2011
@ 14:53:
Hi ,
I have tried the 5 th step but a popup of acrobat reader is blinked on and off. is there any solution for this thing because for one document if it will raise one popup for hundred documents what can happen.
Thanks in advance
ansar
on Jan 7th, 2011
@ 14:59:
Thanks for the reply I have tried with 9.0 version only. For my company requirement it should be configurable kind of stuff it should not be effected with the versions which client has .
Martin Zeller
on Jan 7th, 2011
@ 17:39:
Ansar,
in my case it was an intranet where it was clear which version would be on the clients.
I think there isn’t any clean solution for direct printing if you cannot control the clients.
phil
on Mrz 20th, 2011
@ 18:09:
PDFs are now the default legal documents. I remember when wordperfect was the standard
Tenant Background Screening
on Mai 16th, 2011
@ 23:35:
Terrific! I have to agree this is speaking the truth. Keep it up.
Carmelina Loehner
on Aug 1st, 2011
@ 12:41:
foundfor the most partwillgo alongwith your blog.
Mauricio Coto
on Dez 1st, 2011
@ 23:12:
Hi i’m trying to use the number 2: Printing a pdf with windows shell command.. on a asp .net application.
It works perfectly when i execute it on the Dev Server for debbugin of Visual Studio. But when i try the same code in the release version from another computer outside the server it doesn’t works.
Any clue?
Martin Zeller
on Dez 2nd, 2011
@ 16:56:
Mauricio,
I don’t know your requirements, but for sure, if the you want to print the pdf on the client, it won’t work this way, because you are calling the shell on the server!
Mauricio Coto
on Dez 2nd, 2011
@ 18:24:
Hi Martin,
No, i understand how it works! I know it will run on the server, the thing is that in my ASP application, when i run it from the visual studio(with the debugger) it prints my document just as you said.
But when i publish my app in the IIS server and try to print the same doc it doesn’t do anything!
I guess what is happening is that the default printer of my server is the Windows XPS document writer, but i have tried changing my default printer to the lexmark i have, and it doesn’t work!
Thanks!!
Martin Zeller
on Dez 7th, 2011
@ 10:46:
Hi Mauricio, sorry for the delay – business.
Have you found a solution yet?
Did you try to print a raw text file instead of the pdf file with the lexmark as default printer?
I never went deeper into number 2… I think you could get some hints from this site: http://www.robvanderwoude.com/printfiles.php#PrintPDF
shalini
on Jan 4th, 2012
@ 16:25:
Hi i am trying to use the ghostscript implementation so does it have any prerequisites like installing Acrobat Reader on all machines ..i am new to programming so if you could explain help me understand the code where we pass the argument …
Martin Zeller
on Jan 4th, 2012
@ 16:35:
Hi shalini,
you need two things:
1. ghostscript (see the link above)
2. a printer
Install ghostscript and put the appropriate path to psInfo.FileName
Then look at the arguments: you need your printer name and the path to the pdf file (take the screenshot above as reference)
Kind regards
Martin
Praveen
on Feb 24th, 2012
@ 16:17:
Really Cool Work,
Helped me a lot. Was gng through a lot of sites to get this soluiton.
Thanks a lot buddy, keep up the good work. Cheers
Advanced
on Mai 15th, 2012
@ 23:48:
read more…
[...]just below, are some totally unrelated sites to ours, however, they are definitely worth checking out[...]…
Jaswanth
on Jun 12th, 2012
@ 10:12:
Thanx alot !!
Reallt kewl
I want ur guidance Mr.Freelancer
hope yew’ll provide me wen ever I ask for
Thanx again
Uday
on Jul 11th, 2012
@ 10:05:
In web Application,Will it print in client machine
Don George
on Jul 21st, 2012
@ 00:22:
Any way to print just one page without the Reader or Print Dialog popping up?
best captcha solver
on Aug 6th, 2012
@ 02:03:
Great article. I will be facing many of these issues as well.
.
magajardo
on Okt 4th, 2012
@ 15:45:
good article, but i need to print a pdf file and not to open adobe’s windows (client machine). Can you help me in this job?. Thanks
winning pooh
on Nov 24th, 2012
@ 12:06:
I’m really impressed together with your writing skills as smartly as with the layout to your weblog. Is that this a paid topic or did you customize it your self? Either way keep up the excellent quality writing, it is uncommon to see a nice blog like this one today..
Darain
on Jan 11th, 2013
@ 20:37:
Amazing! Thanks Martin.
After three years your same codes still works like a champ!
I am using VS 2010, .Net 4.0, and IIS 7. I have tested using Adobe (used to be Acrobat) Reader (the latest) and Ghostscript (latest 9.06). The codes just work. I would choose Ghostscript for three reasons:
1. Adobe Reader requires frequent security updates these dates, I don’t want that on my web server.
2. Adobe Reader pops up automatically although laid minimized. This is a minor issue as I don’t mind it stays on the task bar. However, Ghostscript is totally clean. It pops up the commandline prompt to run but closes itself when finished.
3. Adobe Reader is bloated and you never know what changes they would make after say, one year. Ghostscript has been always a minimalist in all this years.
Aj
on Mai 17th, 2013
@ 07:14:
5. Printing a pdf with Acrobat Reader command line
Here the exception : The system cannot find the file specified
Aj
on Mai 17th, 2013
@ 07:18:
Amazing article ….
5. Printing a pdf with Acrobat Reader command line
Dim strDelemiter =”@”
Dim PrintPDF As New ProcessStartInfo
Dim adobeOtherWay = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(“Software”).OpenSubKey(“Classes”).OpenSubKey(“acrobat”).OpenSubKey(“shell”).OpenSubKey(“open”).OpenSubKey(“command”)
Dim pathOtherWay As String
pathOtherWay = adobeOtherWay.GetValue(“”).ToString()
PrintPDF.FileName = strDelemiter & pathOtherWay
PrintPDF.Arguments = String.Format(“/s /o /h /p{0}”, BatchFile)
PrintPDF.WindowStyle = ProcessWindowStyle.Hidden
PrintPDF.CreateNoWindow = True
PrintPDF.UseShellExecute = True
Process.Start(PrintPDF)