Como imprimir para salvar como PDF em uma linha de comando com o Chrome ou o Chromium

43

Posso imprimir no destino "Salvar como PDF" em uma linha de comando com o Chrome ou o Chromium? Gostaria de poder converter automaticamente arquivos html para PDF com a funcionalidade incorporada do Chrome.

ipavlic
fonte
@golimar Não é uma impressora virtual. O Chrome possui uma opção integrada para exportar para pdf.
Ipavlic
1
Não vejo nenhum switch interno do Chrome para salvar em PDF.
Karan 10/10
@ Karan Quando você vai para Printlá deve haver um Save to PDFdestino disponível para você escolher. Também está claramente indicado na página de suporte do Google: support.google.com/chrome/bin/…
ipavlic
2
Talvez meu comentário anterior não tenha sido claro. Você queria saber como fazer isso na linha de comando, e o que eu queria dizer era que o Chrome / Chromium parece não ter opções / parâmetros de linha de comando para fazer isso, embora eu saiba que você pode fazer isso na interface do usuário. Você precisará encontrar uma maneira de ativar a opção Salvar como, talvez enviando cliques do mouse ou pressionamentos de tecla.
22413 Karan

Respostas:

11

Em vez de chamar um navegador da Web inteiro, por que não usar o mecanismo de renderização HTML apenas para fazer o trabalho? Use wkhtmltopdf para executar a conversão.

wktohtml

Você também pode converter um site existente em PDF

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

Nota: tecnicamente, o mecanismo de renderização do Google Chrome é o Blink, que é um fork do Webkit. Há mais de 90% do código comum entre o Blink e o Webkit, portanto, você deve obter um resultado semelhante.

hanxue
fonte
Nota por ter tentado isso e ter coisas sutis ausentes ou quebradas: a fonte do wkhtmltopdf contém patches do QtWebkit que permitem recursos importantes, como links clicáveis. É provável que o pacote da sua distribuição esteja ausente desses recursos se ele listar o pacote qtwebkit usual da sua distribuição como uma dependência. Instalar o wkhtmltopdf a partir da fonte leva 3,7 GiB de disco e algumas horas.
Anko
34
-1 Esta resposta não corresponde à pergunta, o wkhtmltox é uma ótima ferramenta, mas não apresenta um desempenho tão bom quanto o chrome ou o firefox na exportação para PDF.
Carlos C Soto
@ Anko Não sei se entendi. O que devo esperar criando wkhtmltopdf a partir da fonte?
VH-NZZ
2
também não é recomendável, se você tiver CSS sofisticado, o wkhtmltopdf é inútil.
MushyPeas
2
SVGs não são renderizados.
Marco Sulla
38

O Chrome iniciou o programa decapitado .

Com isso, podemos criar um pdf. por exemplo, para o Windows, navegue na linha de comando para

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

Em seguida, pressione o comando:

chrome --headless --print-to-pdf="d:\\{{path and file name}}.pdf" https://google.com
Vikas
fonte
Apenas um alerta, se você tiver alguma instância existente do Chrome em execução no Windows, o comando não funcionará. Mate todos os processos do Chrome primeiro e, em seguida, ele funcionará. Pode haver um sinalizador para solucionar esse inconveniente.
John Leidegren
1
@JohnLeidegren (pelo menos) a partir do Chrome para Windows Versão 66.0.3359.139 (Compilação Oficial) (64 bits), isso funciona sem interromper nenhum processo do Chrome.
Naitsirhc
2
Observe que você pode usar --user-data-dir="C:\Users\...\AppData\Local\Google\Chrome\User Datapara executar no perfil do Chrome do usuário. Isso é útil, por exemplo, para exportar conteúdo de um site que exige que os usuários estejam conectados, pois os cookies de sessão estão disponíveis.
Naitsirhc
@naitsirhc FYI, eu achei a marionetista uma boa alternativa para as coisas da linha de comando, se você está tentando fazer algo mais elaborado. Ele possui uma ótima API de cromo remoto para executar várias tarefas, além de gerenciar versões para você. Muito agradável.
John Leidegren
SVGs são renderizados incorretamente
Marco Sulla
17

Você deve estar usando o Google Chrome / Chromium 59 ou versão posterior e está disponível apenas para usuários de MAC OS e Linux.

* Os usuários do Windows ainda precisam esperar um pouco até a Versão 60 *

Comando:

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

Referência: https://developers.google.com/web/updates/2017/04/headless-chrome

EDIT: O Google Chrome / Chromium 60 foi lançado para usuários do Windows.

Uso de comando no CMD:

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

O nome do arquivo pdf file1.pdf será salvo em

"C: \ Arquivos de Programas ou (x86) \ Google \ Chrome \ Application \ 60.0.3112.113 (versão chrome) \ file1.pdf"

Rahul_Dange
fonte
--disable-gpunão deve mais ser necessário nas versões mais recentes.
Ring Ø
isso cria uma saída muito melhor / consistente do que wkhtmltopdf ou weasyprint
ierdna
0

Falha na conversão em lote de arquivos html locais para PDF - compartilhando a abordagem.

Navegue até uma pasta que contém um lote de arquivos html que você deseja converter ...

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

Nota - deve usar a barra para evitar negar o% f no caminho do arquivo.

Zac
fonte