Possible to print to PDF from Mac terminal?

19

6

Is it possible to take a file and print it to a PDF using nothing but terminal commands? I am guessing you would somehow make use of the lpr command, but I have yet to discover the correct syntax.

tambler

Posted 2011-01-05T15:38:07.300

Reputation: 291

What sort of file? plain text? – Doug Harris – 2011-01-05T15:46:22.583

1@Daniel, I should've been more clear in my question: What sort of source file? -- My answer below will work for plain text files, but not for images. – Doug Harris – 2011-01-05T16:06:08.557

@Doug I apologize, I actually misread the question. – Daniel Beck – 2011-01-05T16:08:26.123

1@Daniel - What I'm really aiming for is something more graphically intensive, say HTML pages. Is this possible? – tambler – 2011-01-05T18:05:39.410

1Your main problem probably is, that the viewer application is file format dependent. Make up your mind what format you want and you'll get specific answers. – Daniel Beck – 2011-01-05T18:41:15.777

@Daniel - "Make up my mind what format?" - I want to convert an HTML web page to PDF. That has been my intention all along. I have finally settled on wktmltopdf. – tambler – 2011-01-07T04:11:19.727

Did one of the responses answer your question? If not, what doesn't work or doesn't behave as intended? – Daniel Beck – 2011-01-28T15:42:02.040

Answers

11

lpr is indeed the correct command. There's not much to it, just

lpr filename.pdf

should simply work, presuming that the default printer is set correctly. If not, you might have to do

lpr -P printername filename.pdf

Note that there's a man page -- "man lpr" if you need to see the content. Yes, the CUPS print daemon that OS X uses is already PDF aware.

Perry

Posted 2011-01-05T15:38:07.300

Reputation: 225

Provided solution gives zero-size pdf on Yosemite. Any ideas how to solve it? – Stanislav Mekhonoshin – 2015-06-01T12:41:03.153

Sorry for duplication. Provided solution gives zero-size pdf on Yosemite, when I'm trying to pring .pages document. RTF or txt are printed well. Any ideas how to fix it? – Stanislav Mekhonoshin – 2015-06-01T13:06:35.837

lpr does not generate pdf files, so I am not sure I understand the comment. You cannot generate pdf files with lpr. – Perry – 2017-05-18T21:32:58.290

4This does not answer the original question as it was how to 'print to pdf', not print a pdf. – dorien – 2017-06-27T01:29:47.783

5

I know that I have seen something in a merely hidden system folder:

/Library/Scripts/Printing Scripts/Convert To PDF.scpt

I have created a new application from AppleScript but calling the script directly should work also.

EDIT: actually you simply can call

/System/Library/Printers/Libraries/convert -f file.rtf -o file.pdf -j "application/pdf"

user113731

Posted 2011-01-05T15:38:07.300

Reputation:

6This answer is obsolete. Tested in OS X 10.9.5. – 4ae1e1 – 2014-10-15T07:38:11.397

@4ae1e1 No, it isn't. Just that "convert" doesn't exist. It's a symlink to /usr/sbin/cupsfilter and cupsfilter will still work this way even on 10.13.6. – cde – 2018-11-08T03:13:42.390

3

1) The Open Source Word processor, AbiWord, includes an option of converting between any formats it knows on the commandline, including PDF e.g.,

abiword --to=pdf filename.html

(It'll also handle, e.g., MS Word .doc files, .docx, .odt, .rtf, etc., both input and output.)

I know it's available for Mac, though I've never used it on a mac.

2) The ebook-convert command line program from calibre (on mac you need to follow the instructions here to get the commandline tools) is useful for many formats, too.

ebook-convert filename.html filename.pdf

It can handle .rtf and .odt input, and lots of ebook formats like .epub and .mobi.

3) PrinceXML can be used on the commandline, and will convert HTML to PDF very beautifully.

4) There's wkhtmltopdf, which uses the webkit engine to convert HTML to PDF from the commandline. I've never tried it.

5) I can think of other methods using, e.g., ConTeXt or pdflatex, but they get more and more involved.

frabjous

Posted 2011-01-05T15:38:07.300

Reputation: 9 044

1NB: AbiWord doesn't work on intel based Mac – inspectorG4dget – 2014-01-22T18:31:35.700

2

For plain text files, you can use enscript (comes with OS X) to generate a postscript file.

$ enscript -p ~/Desktop/profile.ps /etc/profile
[ 1 pages * 1 copy ] left in /Users/dharris/Desktop/profile.ps

OS X's Preview app can open (and convert) to PDF, or you can install ps2pdf (I installed it via macports) and convert at the command line.

$ ps2pdf ~/Desktop/profile.ps ~/Desktop/profile.pdf

Doug Harris

Posted 2011-01-05T15:38:07.300

Reputation: 23 578

What if I wanted to do something more graphically intensive? Say, converting an HTML page to PDF from the terminal? – tambler – 2011-01-05T17:53:44.433

I know this is old, but PhantomJS can do this, and it does it very well. – Brad – 2013-06-13T03:34:10.187

2

You could also use pandoc from http://johnmacfarlane.net/pandoc/installing.html

With this command you would convert the html file to pdf:

pandoc -o output.pdf input.html

But note that pandoc uses LaTeX for the conversion, so you have to have a LaTeX system installed (http://www.tug.org/mactex/).

Pandoc can also convert to other formats like .odt, .docx and .epub

nnn

Posted 2011-01-05T15:38:07.300

Reputation: 191

1

First get the printer name

lpstat -p

Then use the printer name (Canon1234 - for eg)

lp -d Canon1234 PathToDocument.pdf

Thejus Krishna

Posted 2011-01-05T15:38:07.300

Reputation: 119

Op is looking to print an arbitrary file to a pdf document, not print a pdf to a real printer. – cde – 2018-11-08T03:37:19.327

0

you can add pdf printer driver from using pdf printer

  • first install pdf printer from the store then
  • start pdf printer
  • go to system preferences

  • open printers and scanners

  • click + button

  • in printers list select pdf printer

  • wait for a second

  • then click add

  • set pdf printer as default printer then close...

open terminal then execute the command for print a file

lp /path/to/your/file/to/print.txt

NuOne

Posted 2011-01-05T15:38:07.300

Reputation: 101

0

For local web page files, you can try to use Download URLs as PDF Automator action. Download and install.


I had to start Automator in 32 bit mode:

alt text


Create an Automator Application that automatically receives files and folders as input, with this action as the only one. Save e.g. as Save as PDF.

Open the Get Info dialog of your application, and check Open in 32-bit mode also here. Double-click it once to make sure Launch Services knows the application.


You can use this application from the command line like this:

osascript -e 'tell application "Save as PDF" to open { POSIX file "/path/to/file.html" as alias }'

Of course, you can wrap this in a nice AppleScript .scpt, bash function, shell script, or what not.


This solution is actually pretty flexible. I was able to convert text files and HTML files, and the Automator action is also somewhat configurable.

Daniel Beck

Posted 2011-01-05T15:38:07.300

Reputation: 98 421

0

Actually it's a lot easier than that. You can just type on the command line open *.pdf and Preview will open with all the files there. Weirdly though if you type open *.pdf */*.pdf you get two windows. In each you then have to go into the side bar, select one of the boxy formats (if there are a lot of files it opens by default in list format which doesn't work) type CMD-A to select all, then use the print-selected-pages command to get all of them.

Joanna Bryson

Posted 2011-01-05T15:38:07.300

Reputation: 9