The way I am using that works is with the command os.startfile('PDFfile.pdf', 'print') but it opens default viewer (mine is Adobe Reader) and after printing it stills open, trying to kill the process with os.system('TASKKILL /F /IM AcroRD32.exe') kills other opened windows and I dont want it. Untick ' let windows manage my default printer' then click on Microsoft print to pdf, click the manage button then the set as default button. If windows is managing your default printer it uses the one you last used, so after combining your PDFs (if it works) you might want to go back to letting windows manage the default.
Working with PDFs in the way you do with other programming languages, ain't so easy with C#. Pitifully, most of the libraries are commercial and you will need to pay for a license. Other libraries like Spire PDF offers a free version of the library, however it only supports up to 10 pages per PDF and then you will see a watermark message that it's only for test purposes.
In case you are willing to print a PDF from your Winforms application without using a paid API, we'll show you 2 workarounds that will help you to print a PDF file easily.
A. Using Adobe Acrobat
Print Documents Directly To Pdf Converter
The first way requires that you user has Adobe Acrobat installed. Usually every computer has a program to read PDF files namely Acrobat Reader, so be sure to check that you user has this PDF reader installed.
This method is recommended as it allows the user to choose which pages to print, which printer to use and other settings with the native print dialog: Basic video editor for windows 10.
This code runs the print command in a hidden command line and displays the Print Dialog of the system:
In some Windows versions, the Acrobat Reader may start for a second but it will be automatically closed after you click ok and the file will be printed.
B. Using the RawPrint package
If you don't want to use Acrobat Reader, you may want to use a custom package that sends a file directly to the printer. We are talking about the RawPrint package. RawPrint is a ibrary to send files directly to a Windows printer bypassing the printer driver, it can send PostScript, PCL or other print file types directly to a printer.
Cannot Print Pdf Documents
To install this library on your project, you can use the NuGet package manager of Visual Studio. Go to the solution explorer of the project in Visual Studio and do right click on your project, from the list select the Manage NuGet Packages option:
Print Documents Directly To Pdf
Once the Manager shows up, search for the RawPrint library, select (probably) the first option by Tony Edgecombe and click on install:
After the installation you will be able to use the RawPrint class in your project. For more information about this library, please visit the official repository at Github here.
1. List Printer Names
It's recommendable to list all the available printers in some combo box, so the user only needs to select the desired Printer and then print it. You can list all the available printers using the InstalledPrinters property in the PrinterSettings type:
To use the RawPrint methods, you will need to specify which printer to use. The only way to specify which to use is the name, so be sure to have a name of the printer before sending a file to print. In our case, we have available a real Brother Printer, so we'll use it in this example.
2. Printing PDF
The first way requires that you user has Adobe Acrobat installed. Usually every computer has a program to read PDF files namely Acrobat Reader, so be sure to check that you user has this PDF reader installed.
This method is recommended as it allows the user to choose which pages to print, which printer to use and other settings with the native print dialog: Basic video editor for windows 10.
This code runs the print command in a hidden command line and displays the Print Dialog of the system:
In some Windows versions, the Acrobat Reader may start for a second but it will be automatically closed after you click ok and the file will be printed.
B. Using the RawPrint package
If you don't want to use Acrobat Reader, you may want to use a custom package that sends a file directly to the printer. We are talking about the RawPrint package. RawPrint is a ibrary to send files directly to a Windows printer bypassing the printer driver, it can send PostScript, PCL or other print file types directly to a printer.
Cannot Print Pdf Documents
To install this library on your project, you can use the NuGet package manager of Visual Studio. Go to the solution explorer of the project in Visual Studio and do right click on your project, from the list select the Manage NuGet Packages option:
Print Documents Directly To Pdf
Once the Manager shows up, search for the RawPrint library, select (probably) the first option by Tony Edgecombe and click on install:
After the installation you will be able to use the RawPrint class in your project. For more information about this library, please visit the official repository at Github here.
1. List Printer Names
It's recommendable to list all the available printers in some combo box, so the user only needs to select the desired Printer and then print it. You can list all the available printers using the InstalledPrinters property in the PrinterSettings type:
To use the RawPrint methods, you will need to specify which printer to use. The only way to specify which to use is the name, so be sure to have a name of the printer before sending a file to print. In our case, we have available a real Brother Printer, so we'll use it in this example.
2. Printing PDF
To print the PDF from a file, you only need to use the PrintRawFile method from an instance of RawPrint. This method expects as first argument, the name of the Printer that you want to use to print the file, as second argument the absolute path to the PDF file (including the filename) that you want to print and as last argument the name of the same file. This last argument is used only to display it as name in the queue:
If you execute the previous code and the file exists, the printer should now doing its Job.
Happy coding !