Cách in để lưu dưới dạng PDF từ một dòng lệnh với Chrome hoặc Chromium


43

Tôi có thể in đến đích "Lưu dưới dạng PDF" từ dòng lệnh bằng Chrome hoặc Chromium không? Tôi muốn có thể tự động chuyển đổi các tệp html thành PDF với chức năng tích hợp sẵn của Chrome.


@golimar Nó không phải là máy in ảo. Chrome có tùy chọn tích hợp để xuất sang pdf.
ipavlic

1
Tôi không thấy bất kỳ công tắc Chrome tích hợp nào để lưu dưới dạng PDF.
Karan

@Karan Khi bạn đến Printđó nên có một Save to PDFđiểm đến để bạn lựa chọn. Điều này cũng được nêu rõ trên trang hỗ trợ của Google: support.google.com/chrom/bin/NH
ipavlic

2
Có lẽ bình luận trước đây của tôi không rõ ràng. Bạn muốn biết cách thực hiện điều này từ dòng lệnh và điều tôi muốn nói là Chrome / Chromium dường như không có công tắc / thông số dòng lệnh để thực hiện việc này, mặc dù tôi biết bạn có thể làm điều đó từ UI. Bạn sẽ cần tìm một số cách kích hoạt tùy chọn Lưu dưới dạng, có thể bằng cách gửi các lần nhấp chuột hoặc các lần bấm phím.
Karan

Câu trả lời:


11

Thay vì gọi toàn bộ trình duyệt web, tại sao không sử dụng công cụ kết xuất HTML chỉ để thực hiện công việc? Sử dụng wkhtmltopdf để thực hiện chuyển đổi.

wktohtml

Bạn cũng có thể chuyển đổi một trang web hiện có sang PDF

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

Lưu ý: về mặt kỹ thuật, công cụ kết xuất của Google Chrome là Blink, một nhánh của Webkit. Có> 90% mã phổ biến giữa Blink và Webkit, vì vậy bạn sẽ nhận được kết quả tương tự.


Lưu ý từ việc đã thử điều này và nhận được những thứ tinh tế bị thiếu hoặc bị hỏng: nguồn của wkhtmltopdf chứa các bản vá QtWebkit cho phép các tính năng quan trọng như liên kết có thể nhấp. Gói phân phối của bạn có thể thiếu các tính năng như vậy nếu nó liệt kê gói qtwebkit thông thường của phân phối của bạn dưới dạng phụ thuộc. Cài đặt wkhtmltopdf từ nguồn mất 3,7GiB đĩa và vài giờ.
Anko

34
-1 Câu trả lời này không tương ứng với câu hỏi, wkhtmltox là một công cụ tuyệt vời nhưng nó không hoạt động tốt như chrome hoặc firefox khi xuất sang PDF.
Carlos C Soto

@Anko Không chắc tôi hiểu. Tôi mong đợi điều gì bằng cách xây dựng wkhtmltopdf từ nguồn?
VH-NZZ

2
cũng không thể khuyên bạn, nếu bạn có CSS ​​tinh vi thì wkhtmltopdf là vô dụng.
MushyPeas 18/03/18

2
SVG không được kết xuất.
Marco Sulla

38

Chrome đã bắt đầu chương trình không đầu .

Với điều đó, chúng ta có thể tạo một pdf. ví dụ: đối với các cửa sổ điều hướng dòng lệnh của bạn đến

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

Sau đó nhấn lệnh:

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

Chỉ cần cảnh giác, nếu bạn có bất kỳ phiên bản Chrome nào đang chạy trên Windows, lệnh sẽ không hoạt động. Giết tất cả các quy trình Chrome trước, sau đó nó sẽ hoạt động. Có thể có một lá cờ để khắc phục sự bất tiện này.
John Leidegren

1
@JohnLeidegren (ít nhất) kể từ Chrome cho Windows Phiên bản 66.0.3359.139 (Bản dựng chính thức) (64-bit), điều này hoạt động mà không làm chết bất kỳ quy trình Chrome nào.
naitsirhc

2
Lưu ý rằng bạn có thể sử dụng --user-data-dir="C:\Users\...\AppData\Local\Google\Chrome\User Datađể chạy trong hồ sơ Chrome của người dùng. Điều này rất hữu ích, ví dụ, để xuất nội dung từ một trang web yêu cầu người dùng phải đăng nhập, vì cookie phiên có sẵn.
naitsirhc

@naitsirhc FYI, tôi đã thấy người điều khiển rối là một sự thay thế thực sự tốt cho công cụ dòng lệnh, nếu bạn cố gắng làm một cái gì đó chi tiết hơn. Nó có một API đẹp để crom từ xa để thực hiện các nhiệm vụ khác nhau, nó cũng quản lý các phiên bản cho bạn. Rất đẹp.
John Leidegren

Các SVG được kết xuất không chính xác
Marco Sulla

17

Bạn phải sử dụng Google Chrome / Chromium 59 hoặc phiên bản mới hơn & nó chỉ khả dụng cho người dùng MAC OS và Linux.

* Người dùng Windows vẫn phải chờ một thời gian cho đến Phiên bản 60 *

Chỉ huy :

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

Tham khảo: https://developers.google.com/web/updates/2017/04/headless-chrom

EDIT: Google Chrome / Chromium 60 đã được triển khai cho người dùng windows.

Sử dụng lệnh trong CMD:

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

Tập tin pdf của bạn đặt tên file1.pdf sẽ được lưu trong

"C: \ Tệp chương trình hoặc (x86) \ Google \ Chrome \ Application \ 60.0.3112.113 (phiên bản chrome) \ file1.pdf"


--disable-gpukhông cần thiết nữa trong hầu hết các phiên bản gần đây.
Đổ chuông

điều này tạo ra một sản lượng tốt hơn / nhất quán hơn wkhtmltopdf hoặc weasyprint
ierdna

4

https://github.com/fraserxu/electron-pdf được thiết kế chính xác cho mục đích này.

CLI trông như thế này: $ electron-pdf http://fraserxu.me ~/Desktop/fraserxu.pdf


Tôi đã cài đặt nó, nó bị treo vô thời hạn mà không có đầu ra. Tôi đã cố gắng electron-pdf http://fraserxu.me test.pdfnhư được đề xuất trong trợ giúp, nhưng tôi cũng đã thử gooogle.com
Marco Sulla


0

Đã thực hiện thành công việc chuyển đổi hàng loạt các tệp html cục bộ sang PDF - chia sẻ cách tiếp cận.

Điều hướng đến một thư mục chứa một loạt các tệp html mà bạn muốn chuyển đổi ...

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

Lưu ý - phải sử dụng dấu gạch chéo về phía trước để tránh phủ định% f trong đường dẫn tệp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.