Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to print a PDF with C#

I´ve trying to solve this problem for nearly 2 days. There are a lot of more or fewer good solutions on the net, but not a single one fits my task perfectly.

Task:

  • Print a PDF programmatically
  • Do it with a fixed printer
  • Don´t let the user do more than one Button_Click
  • Do it silent - the more, the better
  • Do it client side

First Solutions:

Do it with a Forms.WebBrowser

If we have Adobe Reader installed, there is a plugin to show PDF´s in the webbrowser. With this solution we have a nice preview and with webbrowserControlName.Print() we can trigger the control to print its content.

Problem - we still have a PrintDialog.


Start the AcroRd32.exe with start arguments

The following CMD command let us use Adobe Reader to print our PDF.

InsertPathTo..\AcroRd32.exe /t "C:\sample.pdf" "\printerNetwork\printerName"

Problems - we need the absolute path to AcroRd32.exe | there is an Adobe Reader Window opening and it has to be opened until the print task is ready.


Use windows presets

Process process = new Process();

process.StartInfo.FileName = pathToPdf; 
process.StartInfo.Verb = "printto";
process.StartInfo.Arguments = "\"" + printerName + "\""; 
process.Start();

process.WaitForInputIdle();
process.Kill();

Problem - there is still an Adobe Reader window popping up, but after the printing is done it closes itself usually.

Solution - convince the client to use Foxit Reader (don´t use last two lines of code).


Convert PDF pages to Drawing.Image

I´ve no idea how to do it with code, but when I get this to work the rest is just a piece of cake. Printing.PrintDocument can fulfill all demands.


Anyone an idea to get some Drawing.Image´s out of those PDF´s or another approach how to do it?

Best Regards, Max

like image 496
Mx. Avatar asked Jul 20 '12 12:07

Mx.


People also ask

Why can't I print a PDF from my computer?

Open your PDF file in your browser, then print it in the browser. If you can't print your PDF file in your browser either, probably your PDF files are corrupted, follow to repair or recreate your PDF file. If you can print your PDF file in your browser, you need to troubleshoot problems with your Acrobat Reader.

Can I print a PDF to a Zebra printer?

If you have a printer with Link-OS you can purchase and install PDF Direct from Zebra on the printer firmware. You can then send a pdf directly to the printer. We do this by connecting to port 9100 and sending the PDF.


2 Answers

The most flexible, easiest and best performing method I could find was using GhostScript. It can print to windows printers directly by printer name.

"C:\Program Files\gs\gs9.07\bin\gswin64c.exe" -dPrinted -dBATCH -dNOPAUSE -sDEVICE=mswinpr2 -dNoCancel -sOutputFile="%printer%printer name" "pdfdocument.pdf"

Add these switches to shrink the document to an A4 page.

-sPAPERSIZE=a4 -dPDFFitPage

like image 164
Johan van der Slikke Avatar answered Sep 29 '22 13:09

Johan van der Slikke


Another approach would to use spooler function in .NET to send the pre-formatted printer data to a printer. But unfortunately you need to work with win32 spooler API

you can look at How to send raw data to a printer by using Visual C# .NET

you only can use this approach when the printer support PDF document natively.

like image 41
Turbot Avatar answered Sep 29 '22 13:09

Turbot