How to Print to Save as PDF from a command line with Chrome or Chromium

85,520

Solution 1

Instead of calling up an entire web-browser, why not use the HTML rendering engine only to do the work? Use wkhtmltopdf to perform the conversion.

wktohtml

You can also convert an existing website to PDF

$ wkhtmltopdf http://google.com google.pdf

Note: technically Google Chrome's rendering engine is Blink, which is a fork of Webkit. There is >90% of common code between Blink and Webkit, so you should get a similar result.

Solution 2

Chrome has started headless program.

With that, we can create a pdf. e.g. for windows navigate your commandline to

C:\Users\{{your_username}}\AppData\Local\Google\Chrome SxS\Application>

Then hit the command:

chrome --headless --print-to-pdf="d:\\{{path and file name}}.pdf" https://google.com

Solution 3

You must be using Google Chrome / Chromium 59 or later version & it’s only available for MAC OS and Linux users.

* Windows users still have to wait for some time till Version 60 *

Command :

$ google-chrome --headless --disable-gpu --print-to-pdf=file1.pdf http://www.example.com/

$ chromium-browser --headless --disable-gpu --print-to-pdf=file1.pdf http://www.example.com/

Reference : https://developers.google.com/web/updates/2017/04/headless-chrome

EDIT : Google Chrome / Chromium 60 has been rolled out for windows users.

Command usage in CMD :

C:\Program Files\Google\Chrome\Application> chrome.exe --headless --disable-gpu --print-to-pdf=file1.pdf http://www.example.com/

Your pdf file naming file1.pdf will be save in

"C:\Program Files or (x86)\Google\Chrome\Application\60.0.3112.113 (chrome-version)\file1.pdf"

Solution 4

https://github.com/fraserxu/electron-pdf was designed exactly for this purpose.

The CLI looks like this: $ electron-pdf http://fraserxu.me ~/Desktop/fraserxu.pdf

Solution 5

I wrote a little wrapper script for Chrome{,ium} headless, called html2pdf.
Ghostscript is in there to reduce the file size, and to select a range of pages:

#!/bin/sh -eu
in=$1 out=$2 page0=${3:-} page1=${4:-$page0}
${CHROME:-chromium} --headless --disable-gpu \
    --run-all-compositor-stages-before-draw --print-to-pdf-no-header \
    --print-to-pdf="$out" "$in"
GS_ARGS=
if [ -n "$page0" ]; then
        GS_ARGS="-dFirstPage=$page0 -dLastPage=$page1"
fi
gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH $GS_ARGS -sOutputFile="$2.tmp" "$2"
mv "$2.tmp" "$2"

Example usage:

html2pdf https://ucm.dev/resume.html ucm.pdf 1
Share:
85,520

Related videos on Youtube

ipavlic
Author by

ipavlic

Updated on September 18, 2022

Comments

  • ipavlic
    ipavlic over 1 year

    Can I print to destination "Save as PDF" from a command line with Chrome or Chromium? I'd like to be able to automatically convert html files to PDF with Chrome's built-in functionality.

    • Karan
      Karan almost 11 years
      I don't see any built-in Chrome switches for saving as PDF.
    • ipavlic
      ipavlic almost 11 years
      @Karan When you go to Print there should be a Save to PDF destination available for you to choose. It's also clearly stated on Google's support page: support.google.com/chrome/bin/…
    • Karan
      Karan almost 11 years
      Perhaps my previous comment wasn't clear. You wanted to know how to do this from the command line, and what I wanted to say was that Chrome/Chromium seem to have no command-line switches/params to do this, although I know you can do it from the UI. You'll need to find some way of triggering the Save As option, perhaps by sending mouse clicks or key strokes.
  • Blackd
    Blackd over 8 years
    Note from having tried this and getting subtle things missing or broken: wkhtmltopdf's source contains QtWebkit patches that enable important features such as clickable links. Your distribution's package is likely to be missing such features if it lists your distribution's usual qtwebkit package as a dependency. Installing wkhtmltopdf from source takes 3.7GiB of disk and some hours.
  • Carlos C Soto
    Carlos C Soto almost 8 years
    -1 This answer does not correspond to the question, wkhtmltox is a great tool but it does not perform as well as chrome or firefox on exporting to PDF.
  • VH-NZZ
    VH-NZZ over 7 years
    @Anko Not sure I understood. What am I to expect by building wkhtmltopdf from source?
  • Déjà vu
    Déjà vu over 6 years
    --disable-gpu should not be necessary anymore in most recent versions.
  • ierdna
    ierdna over 6 years
    this creates a MUCH better/consistent output than wkhtmltopdf or weasyprint
  • Dave
    Dave over 6 years
    This isn't great for Javascript based websites. I've been trying it with stage-plan.com and it just doesn't work... Even raised bugs on github
  • John Leidegren
    John Leidegren about 6 years
    Just a heads up, if you have any existing instance of Chrome running on Windows the command won't work. Kill all Chrome processes first, then it will work. There might be a flag to work around this inconvenience.
  • MushyPeas
    MushyPeas about 6 years
    can't recommend it either, if you have sophisticated CSS wkhtmltopdf is useless.
  • naitsirhc
    naitsirhc almost 6 years
    @JohnLeidegren (at least) as of Chrome for Windows Version 66.0.3359.139 (Official Build) (64-bit), this works without killing any Chrome processes.
  • naitsirhc
    naitsirhc almost 6 years
    Note that you can use --user-data-dir="C:\Users\...\AppData\Local\Google\Chrome\Us‌​er Data to run under your user's Chrome profile. This is useful, for example, for exporting content from a website that requires users to be logged in, since session cookies are available.
  • John Leidegren
    John Leidegren almost 6 years
    @naitsirhc FYI, I've found puppeteer to be a really good alternative to the command line stuff, if you trying to do something more elaborate. It has a nice API to remote chromium to do various tasks, it also manages versions for you. Very nice.
  • Marco Sulla
    Marco Sulla about 5 years
    SVGs are not rendered.
  • Marco Sulla
    Marco Sulla about 5 years
    SVGs are rendered incorrectly
  • Marco Sulla
    Marco Sulla about 5 years
    I installed it, it hangs indefinitively without any output. I tried electron-pdf http://fraserxu.me test.pdf as suggested in the help, but I tried gooogle.com too
  • Marco Sulla
    Marco Sulla about 5 years
  • arielnmz
    arielnmz about 4 years
    -1 wkhtmltopdf is severely lacking for CSS3 documents
  • Déjà vu
    Déjà vu almost 4 years
  • Mikko Rantalainen
    Mikko Rantalainen over 3 years
    See bugs github.com/electron/electron/issues/20634 github.com/electron/electron/issues/20634 - any app using Electron since version 6.1 (which you have to use to print untrusted HTML) will hang if page contains an <iframe> with cross-domain src attribute. The electron-pdf would be the correct choice if its quality were better.
  • mbx
    mbx almost 3 years
    Thanks for the --print-to-pdf-no-header, that's one parameter I still missed. Is there is list somewhere with the other parameters we know from the print dialog (like Margins, Scale, Paper size)?
  • mbx
    mbx almost 3 years
    From looking at headless_shell_switches.cc and chrome_switches.cc it seems like those parameters aren't (yet?) mapped. For non-trivial scenraios puppeteer seems the way to go.
  • bryc
    bryc over 2 years
    -1. I have hundreds of local HTML files that have Print stylesheets Chrome can handle. wkhtmltopdf takes almost 70 seconds per HTML file (unacceptable) and fails to render the page as it should with the proper Print stylesheet. This is an old answer, but even the updated version of this software is useless for this.
  • Kamil Dziedzic
    Kamil Dziedzic over 2 years
    wkhtmltopdf is garbage. Doesn't print emoji, forgot about supporting chinese fonts... yes you can try to get one or the another but... it doesn't work.