Как распечатать, чтобы сохранить как PDF из командной строки с Chrome или Chromium

43

Можно ли распечатать по назначению «Сохранить как PDF» из командной строки с Chrome или Chromium? Я хотел бы иметь возможность автоматически конвертировать HTML-файлы в PDF со встроенной функциональностью Chrome.

ipavlic
источник
@golimar Это не виртуальный принтер. Chrome имеет встроенную опцию для экспорта в PDF.
ipavlic
1
Я не вижу встроенных переключателей Chrome для сохранения в формате PDF.
Каран
@Karan Когда вы идете в, Printдолжен быть Save to PDFпункт назначения, доступный для вас, чтобы выбрать. Он также четко указан на странице поддержки Google: support.google.com/chrome/bin/...
ipavlic
2
Возможно, мой предыдущий комментарий не был ясен. Вы хотели узнать, как это сделать из командной строки, и я хотел сказать, что в Chrome / Chromium, похоже, нет переключателей / параметров командной строки для этого, хотя я знаю, что вы можете сделать это из пользовательского интерфейса. Вам нужно будет найти какой-нибудь способ активировать опцию Сохранить как, возможно, посылая щелчки мышью или нажатия клавиш.
Каран

Ответы:

11

Вместо вызова всего веб-браузера, почему бы не использовать механизм рендеринга HTML только для выполнения работы? Используйте wkhtmltopdf для выполнения преобразования.

wktohtml

Вы также можете конвертировать существующий сайт в PDF

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

Примечание: технически движком рендеринга Google Chrome является Blink, который является форком Webkit. Существует более 90% общего кода между Blink и Webkit, поэтому вы должны получить аналогичный результат.

hanxue
источник
Обратите внимание на то, что вы попробовали это и получили тонкие вещи, отсутствующие или испорченные: исходный код wkhtmltopdf содержит исправления QtWebkit, которые включают важные функции, такие как интерактивные ссылки. В пакете вашего дистрибутива, скорее всего, отсутствуют такие функции, если в нем указан обычный пакет вашего дистрибутива qtwebkit в качестве зависимости. Установка wkhtmltopdf из исходного кода занимает 3,7 ГБ диска и несколько часов.
Анко
34
-1 Этот ответ не соответствует вопросу, wkhtmltox - отличный инструмент, но он не работает так же хорошо, как Chrome или Firefox при экспорте в PDF.
Карлос С Сото
@ Анко Не уверен, что понял. Чего мне ожидать, собирая wkhtmltopdf из исходного кода?
VH-NZZ
2
Я не могу рекомендовать его, если у вас есть сложный CSS, wkhtmltopdf бесполезен.
MushyPeas
2
SVG не отображаются.
Марко Сулла
38

Chrome запустил безголовую программу.

С этим мы можем создать PDF. Например, для Windows перейдите в командной строке

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

Затем нажмите на команду:

chrome --headless --print-to-pdf="d:\\{{path and file name}}.pdf" https://google.com
Викас
источник
Просто наперед, если у вас есть какой-либо существующий экземпляр Chrome, работающий в Windows, команда не будет работать. Сначала убейте все процессы Chrome, затем он будет работать. Там может быть флаг, чтобы обойти это неудобство.
Джон Лейдгрен
1
@JohnLeidegren (по крайней мере) с версии Chrome для Windows версии 66.0.3359.139 (официальная сборка) (64-разрядная версия), это работает без остановки каких-либо процессов Chrome.
naitsirhc
2
Обратите внимание, что вы можете использовать --user-data-dir="C:\Users\...\AppData\Local\Google\Chrome\User Dataдля запуска под профилем Chrome вашего пользователя. Это полезно, например, для экспорта контента с веб-сайта, который требует, чтобы пользователи входили в систему, поскольку сеансовые файлы cookie доступны.
naitsirhc
@naitsirhc FYI, я нашел кукловода действительно хорошей альтернативой командной строке, если вы пытаетесь сделать что-то более сложное. Он имеет приятный API для удаленного Chromium для выполнения различных задач, а также управляет версиями для вас. Очень хорошо.
Джон Лейдгрен
SVG отображаются неверно
Марко Сулла
17

Вы должны использовать Google Chrome / Chromium 59 или более позднюю версию & это доступно только для пользователей MAC OS и Linux.

* Пользователям Windows все еще нужно подождать до версии 60 *

Команда:

$ 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/

Ссылка: https://developers.google.com/web/updates/2017/04/headless-chrome

РЕДАКТИРОВАТЬ: Google Chrome / Chromium 60 был выпущен для пользователей Windows.

Использование команды в CMD:

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

Ваш pdf файл с именем file1.pdf будет сохранен в

«C: \ Program Files или (x86) \ Google \ Chrome \ Application \ 60.0.3112.113 (chrome-версия) \ file1.pdf»

Rahul_Dange
источник
--disable-gpuне должно быть больше необходимости в самых последних версиях.
Кольцо Ø
это создает НАМНОГО лучший / последовательный вывод, чем wkhtmltopdf или weasyprint
ierdna
4

https://github.com/fraserxu/electron-pdf был разработан специально для этой цели.

CLI выглядит так: $ electron-pdf http://fraserxu.me ~/Desktop/fraserxu.pdf

Нейт Гуд
источник
Я установил его, он висит бесконечно без вывода. Я попытался, electron-pdf http://fraserxu.me test.pdfкак предложено в справке, но я тоже попробовал gooogle.com
Марко Сулла
Я открыл выпуск github.com/electron/electron/issues/17631#issue-427405049
Марко Сулла
0

Успешно сделал пакетное преобразование локальных файлов HTML в PDF - разделяя подход.

Перейдите в папку, содержащую пакет HTML-файлов, которые вы хотите конвертировать ...

for %f in (*.html) do (
start /wait chrome --headless --disable-gpu --print-to-pdf="C:/[DESTINATION FOLDER PATH]%f.pdf" "C:/[SOURCE HTML FILE FOLDER PATH -- ALSO CURRENT FOLDER]%f"
)

Примечание. Необходимо использовать прямую косую черту, чтобы избежать отрицания% f в пути к файлу.

Zac
источник