Comment imprimer pour enregistrer au format PDF à partir d'une ligne de commande avec Chrome ou Chromium

43

Puis-je imprimer vers la destination "Enregistrer au format PDF" à partir d'une ligne de commande avec Chrome ou Chromium? J'aimerais pouvoir convertir automatiquement des fichiers HTML en PDF avec la fonctionnalité intégrée de Chrome.

ipavlic
la source
@golimar Ce n'est pas une imprimante virtuelle. Chrome a une option intégrée pour exporter au format PDF.
ipavlic
1
Je ne vois pas de commutateur Chrome intégré pour l'enregistrement au format PDF.
Karan
@ Karan Quand vous allez à, Printil devrait y avoir une Save to PDFdestination disponible pour vous de choisir. C'est aussi clairement indiqué sur la page de support de Google: support.google.com/chrome/bin/…
ipavlic
2
Peut-être que mon commentaire précédent n'était pas clair. Vous vouliez savoir comment procéder à partir de la ligne de commande. Ce que je voulais dire, c'est que Chrome / Chromium ne semble pas avoir de paramètres / paramètres de ligne de commande pour le faire, même si je sais que vous pouvez le faire à partir de l'interface utilisateur. Vous devrez trouver un moyen de déclencher l'option Enregistrer sous, par exemple en envoyant des clics de souris ou des frappes.
Karan

Réponses:

11

Au lieu d'appeler un navigateur Web complet, pourquoi ne pas utiliser le moteur de rendu HTML uniquement pour effectuer le travail? Utilisez wkhtmltopdf pour effectuer la conversion.

wktohtml

Vous pouvez également convertir un site Web existant au format PDF.

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

Remarque: techniquement, le moteur de rendu de Google Chrome est Blink, un fork de Webkit. Il existe plus de 90% de code commun entre Blink et Webkit. Vous devriez donc obtenir un résultat similaire.

hanxue
la source
Note pour avoir essayé cela et avoir perdu ou cassé des choses subtiles: la source de wkhtmltopdf contient des correctifs QtWebkit qui permettent des fonctionnalités importantes telles que des liens cliquables. Le paquet de votre distribution manquera probablement de telles fonctionnalités s'il indique le paquet qtwebkit habituel de votre distribution comme dépendance. L'installation de wkhtmltopdf à partir des sources nécessite 3,7 Go de disque et quelques heures.
Anko
34
-1 Cette réponse ne correspond pas à la question, wkhtmltox est un excellent outil mais il ne fonctionne pas aussi bien que chrome ou firefox lors de l'exportation au format PDF.
Carlos C Soto
@Anko Je ne suis pas sûr d'avoir compris. À quoi dois-je m'attendre en construisant wkhtmltopdf à partir de la source?
VH-NZZ
2
Je ne peux pas le recommander non plus, si vous avez un CSS sophistiqué, wkhtmltopdf est inutile.
MushyPeas
2
Les SVG ne sont pas rendus.
Marco Sulla
38

Chrome a démarré le programme sans tête .

Avec cela, nous pouvons créer un pdf. par exemple, pour les fenêtres, accédez à votre ligne de commande

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

Puis appuyez sur la commande:

chrome --headless --print-to-pdf="d:\\{{path and file name}}.pdf" https://google.com
Vikas
la source
Si vous avez une instance existante de Chrome s'exécutant sous Windows, la commande ne fonctionnera pas. Tuez tous les processus Chrome en premier, puis cela fonctionnera. Il pourrait y avoir un drapeau pour contourner cet inconvénient.
John Leidegren
1
@JohnLeidegren (au moins) à partir de Chrome pour Windows, version 66.0.3359.139 (Version officielle) (64 bits), cela fonctionne sans tuer aucun processus Chrome.
Naitsirhc
2
Notez que vous pouvez utiliser --user-data-dir="C:\Users\...\AppData\Local\Google\Chrome\User Datale profil Chrome de votre utilisateur. Ceci est utile, par exemple, pour exporter du contenu à partir d'un site Web nécessitant une connexion des utilisateurs, car les cookies de session sont disponibles.
Naitsirhc
@naitsirhc FYI, j'ai trouvé que marionnettiste était une très bonne alternative aux commandes en ligne de commande, si vous essayez de faire quelque chose de plus élaboré. Il a une belle API sur le chrome distant pour effectuer diverses tâches, il gère également les versions pour vous. Très agréable.
John Leidegren
Les SVG sont mal rendus
Marco Sulla
17

Vous devez utiliser Google Chrome / Chromium 59 ou une version ultérieure. & il n’est disponible que pour les utilisateurs MAC OS et Linux.

* Les utilisateurs de Windows doivent encore attendre un peu jusqu'à la version 60 *

Commande:

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

Référence: https://developers.google.com/web/updates/2017/04/headless-chrome

EDIT: Google Chrome / Chrome 60 a été déployé pour les utilisateurs de Windows.

Utilisation de la commande dans CMD:

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

Votre fichier pdf nommant fichier1.pdf sera sauvegardé dans

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

Rahul_Dange
la source
--disable-gpune devrait plus être nécessaire dans les versions les plus récentes.
Bague Ø
cela crée BEAUCOUP une sortie meilleure / cohérente que wkhtmltopdf ou weasyprint
mardi
4

https://github.com/fraserxu/electron-pdf a été conçu exactement à cette fin.

La CLI ressemble à ceci: $ electron-pdf http://fraserxu.me ~/Desktop/fraserxu.pdf

Nate Good
la source
Je l'ai installé, il se bloque indéfiniment sans aucune sortie. J'ai essayé electron-pdf http://fraserxu.me test.pdfcomme suggéré dans l'aide, mais j'ai aussi essayé gooogle.com
Marco Sulla
0

A réussi à convertir par lots des fichiers HTML locaux en PDF - en partageant l’approche.

Accédez à un dossier contenant un lot de fichiers HTML que vous souhaitez convertir.

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"
)

Remarque - vous devez utiliser une barre oblique pour éviter de nier le% f dans le chemin du fichier.

Zac
la source