PDFtoPrinter: Command-line PDF printing


A utility that prints PDF files from the Windows command line

PDFtoPrinter is a program for printing PDF files from the Windows command line. You may download it here. The program is designed generally for the Windows command line and also for use with the vDos DOS emulator (see below). (Slightly corrected, 30 December 2023.)

Note: In some network setups, when printing from an Apache server, the current version may not print correctly. This older version should work correctly if the current one does not. (You might also try this .Net wrapper for the application; I have not tried it.)

Malware detection: Some anti-malware programs will report that my installer contains malware; this happens because the AutoIt scripting language has been used to create malware and anti-malware programs block anything created in AutoIt.If you don't trust my software, don't use my software! Find something else instead! (Or compile it yourself from the code on the GitHub repository for the software.)


You may not need this program at all

This program seems to be the only free standalone program that prints PDF files from the Windows command line without unwanted side effects. However, Windows Powershell can also print PDF files from the command line, and if Powershell can do what you need, then you don't need the PDFtoPrinter program.

For example, to print to a specific printer, use this Powershell command:

Start-Process -FilePath "path\to\file" -Verb PrintTo -ArgumentList "Name of Printer" -PassThru | %{sleep 10;$_} | kill

Or to print to the default printer, use this command:

Start-Process -FilePath "path\to\file" -Verb Print -PassThru | %{sleep 10;$_} | kill


The program and how it works

The program is a compiled AutoIt script that effectively serves as a "wrapper" around the free PDF-Xchange Viewer, which is included in the PDFtoPrinter program itself. (Someone asked whether I wrote the script; yes, I did; but it has been improved by a programmer who prefers to remain anonymous.) PDF-Xchange Viewer is the only no-cost PDF software that I know of that does all of the following:

You can use PDF-Xchange Viewer (or its successor, PDF-XChange Editor) to do everything that the PDFtoPrinter program can do, but PDFtoPrinter is easier to use for its single purpose of printing from the command line. Also, PDFtoPrinter requires no setup and always maintains the correct settings for its single purpose. PDF-Xchange Viewer, when used as a standalone program, is infinitely more flexible, but at the cost of easily losing the settings required for "Select paper source from page size."

Technical questions: If you have technical questions about printing from this application (e.g., which PDF version is required by the software, if any), don't waste your valuable time asking me, because I don't know the answer. Remember: PDFtoPrinter.exe is a wrapper around PDF-Xchange Viewer, by Tracker Software. Only Tracker Software will know the answers to your questions, and you should of course buy a license for their software before you ask them for help.

Note: If your antivirus software mistakenly tells you that the PDFtoPrinter program is dangerous (because your antivirus software ignorantly warns about any program created with AutoIt), it is up to you to decide whether or not to believe your antivirus software. If you don't trust this software, don't use this software! Don't waste your valuable time sending me an e-mail asking whether the program is safe!

August 2021 version (corrected version, 22 October 2022): A programmer who wishes to remain anonymous provided major enhancements to this software. These include the ability to print multiple files, recurse through subdirectories, generate a CSV file listing files printed, reverse page-number selections, and more. Versions posted since 21 April 2022 include further improvements that should help with printing from network servers.

To print a PDF file to the default Windows printer, use this command:

PDFtoPrinter filename.pdf

You can use a full path for the filename, but if the path or filename contains spaces, use quotation marks around the path and filename.

Alternatively, you can simply drop a PDF file on to the application (or on a shortcut to it).

To print to a specific printer, add the name of the printer in quotation marks:

PDFtoPrinter filename.pdf "Name of Printer"

If you want to print to a network printer, use the name that appears in Windows print dialogs, like this (and be careful to note the two backslashes at the start of the name and the single backslash after the servername):

PDFtoPrinter filename.pdf "\\SERVER\PrinterName"

If you mistype the printer name or specify a printer that does not exist, nothing will print, but no error message will be displayed.

To select a printer from a list of installed printers, change the name of the program to PDFtoPrinterSelect.exe. When launched, it will pop up a list of installed printers, unless you specify a printer name on the command-line, in which case it will print to the specified printer, without displaying a menu.

To specify a page range: Whether or not you specify a printer, you can specify a page range to print by adding an optional parameter, like this (no spaces around the equals sign):

PDFtoPrinter filename.pdf pages=#-#

Separate multiple page ranges with commas (no spaces) like this: 2-4,7,12 or, to specify all pages after a specific page, use its number followed by a hyphen, like this: 7- . You can also use z-1 for reverse printing of the last pages in the number, or z:-1:odd|even to reverse print odd or even pages, or r5-r2 for fifth-to-last to second-to last pages.

To print multiple copies: To print more than one copy, add an optional parameter, like this (no spaces around the equals sign):

PDFtoPrinter filename.pdf copies=#

To print a password-protected PDF: Specify /p:password on the command line.

To restore Windows focus to a calling program: If you launch PDFtoPrinter.exe from another program, this optional parameter tries to restore the Windows focus to the window with the title specified in the parameter:

PDFtoPrinter filename.pdf focus="My Calling Program"

You may omit the quotation marks if the window title of the calling program has no spaces.

To run silently, with no user feedback or focus change: Specify /s on the command line.

To print multiple PDF files: Specify a wildcard (e.g. A*.pdf) on the command line; this command, by default recursively searches subdirectories. You can also use the /r switch when specifying a single filename, or /Rn to recurse through n depth of subdirectories.

To generate a CSV file listing multiple files printed: Specify /csv on the command line; CSV will be written to %temp%\pdftoprintertemp. Specify /mock to generate the CSV only, but not print any files.

Optional parameters may be combined.

Customization: By default, this system uses these printing options as set in PDF-XChange Viewer: Scaling is set to None; Auto-rotate Sheets; Auto-centre pages in sheets; and Choose paper source by PDF-page size. If you want to change any of these, or choose any other options, download and install PDF-XChange Viewer; open a PDF file, go to the Print menu, set your desired options (and, just to be certain, print the file). Then go to the Edit menu and choose Export All Settings to Data File... Accept the suggested filename, "PDF-XChange Viewer Settings.dat", and save the file to a convenient location. Move or copy the file to the same folder with PDFtoPrinter.exe. When you next run PDFtoPrinter.exe it will use the settings saved in that file.

You may find the PDF-XChange viewer manual at this link.

Duplex printing: PDF-XChange Viewer cannot save a duplex-printing option as the default. To print in duplex mode, modify the settings of your Windows printer (in the Windows Settings or Control Panel app) to enable duplex printing, or install your printer a second time, using a different name, and set it to print duplex by default; then specify that duplex-default printer when running PDFtoPrinter.exe. Search the web if you don't know how to install your printer a second time, or if you don't know how to specify duplex printing in your Windows printer properties.

Troubleshooting:

If you run this program from a batch or Windows .CMD file, and the program doesn't print your document, or if the the PDF-XChange Viewer opens when you run PDFtoPrinter.exe, then edit your batch file so that it sets the folder that contains the program as the current working directory.

If in any situtation, if the program doesn't print your document, or if the PDF-XChange Viewer opens when you run PDFtoPrinter.exe, you can help to identify the problem and possibly solve it. Either rename PDFtoPrinter.exe to a name that includes "debug", perhaps PDFtoPrinter-debug.exe (or make a copy of the program and rename the copy so that its name includes "debug"). Alternatively, run the program (with its original name) with the command-line switch /debug (no quotation marks) added to whatever command-line switches you already use. When you run the program, using either of these methods, it will copy the PDF-Xchange.exe print command to the Windows clipboard; you can then paste this command into a Windows command prompt to see what may have gone wrong.

You may not need this program at all: First, consider the Powershell printing method described at the top of this page. Alternatively, if you want to print PDF files repeatedly from the command line, for example in a production environment, consider doing this. First run PDFtoPrinter.exe from the command line until it prints your file correctly. Then run PDFtoPrinter.exe with the same command line, but also with the "debug" option described above. PDFtoPrinter will place the PDF-Xchange.exe command line on the Windows clipboard; paste it into a convenient place. Then download and install the current version of the PDF-Xchange Editor (paid commercial software) and set up your system to print from the PDF-Xchange Editor with command-line parameters like the one created by PDFtoPrinter.exe. For example, you could put that command into a Windows .CMD file or any other automated procedure. You can now print from the command-line without using PDFtoPrinter.exe to do the job for you.


Printing from vDos (and vDosPlus)

You may use this program with vDos to print PCL or PostScript output to any Windows printer (applies to vDos 2016.10.01 and later versions). Place PDFtoPrinter.exe in the folder with the vDos.exe program. If you want to print PCL output, you must add pcl6.exe to the same folder; if you want to print PostScript output, you must add gswin32c.exe to the same folder.  If you do not have these files, you may download them here (from the vDosPCLPS.zip archive linked near the top of the page). Then use this syntax in config.txt (replacing LPT1 and #LPT1.PDF with LPT2 and #LPT2.PDF, etc., if needed):

LPT1 = "PDFtoPrinter.exe" #LPT1.PDF

You can specify a printer by adding the printer name in quotation marks, like this:

LPT1 = "PDFtoPrinter.exe" #LPT1.PDF "Microsoft XPS Document Writer"

If you want to print to a network printer, use the name that appears in Windows print dialogs, like this (and be careful to note the two backslashes at the start of the name and the single backslash after the servername):

LPT1 = "PDFtoPrinter.exe" #LPT1.PDF "\\SERVER\PrinterName"

If you want to select from a list of installed printers, change the name of the program to PDFtoPrinterSelect.exe (and, of course, change the line in config.txt to refer to "PDFtoPrinterSelect.exe"). The program will pop up a list of installed printers, unless you specify a printer name in the command string, in which case it will print to the specified printer, without displaying a menu.

Use the same procedure with vDosPlus (2016.10.01 and later versions), placing the additional files in the same folder with vDosPlus.exe


Source code

If anyone wants to see the amateurish and probably incompetent AutoIt source code used for compiling the PDFtoPrinter.exe executable, you can find it on this GitHub repository; feel free to modify it and suggest improvements. The external files required for building the executable are also available from the GitHub page. Before compiling, remove the line near the top that contains "Run_After" (this line refers to my code-signing routine).


Licensing

This system uses the free PDF-Xchange Viewer. You should consult the linked page to determine whether or not you may use that program for your own purposes. The compiled AutoIt script that wraps the PDF software is free for use by anyone, anywhere, for any purposes whatever. Do not waste your valuable time asking me about a license for the AutoIt wrapper; you don't need one.


Edward Mendelson (edward [dot] mendelson [at] columbia [dot] edu).