Làm cách nào để kết hợp nhiều tệp PDF bằng dòng lệnh?


52

Có một lớp lót nhanh chóng để kết hợp nhiều pdf thành một không?

Tôi biết nó có thể được thực hiện bằng Preview.app

Câu trả lời:


74

Hãy xem "Kết hợp các tệp PDF trên dòng lệnh trong OSX" trong Tham gia các tệp PDF trong OS X từ Dòng lệnh .

Hóa ra từ Tiger trở đi, OSX vận chuyển với tập lệnh Python thực hiện chính xác những gì bạn cần. Kịch bản đã được thực thi và Python được cài đặt sẵn trên OS X, vì vậy tất cả những gì bạn cần làm để chạy nó là mở Terminal và gõ

"/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py" -o PATH/TO/YOUR/MERGED/FILE.pdf /PATH/TO/ORIGINAL/1.pdf /PATH/TO/ANOTHER/2.pdf /PATH/TO/A/WHOLE/DIR/*.pdf

Cũng trên trang liên kết nó đề nghị thực hiện một liên kết tượng trưng cho join.pytập tin để thực hiện gõ dễ dàng hơn tuy nhiên họ bỏ qua -strong ln -s ... ..., và không có nó, một liên kết cứng được tạo ra. Có lẽ sẽ không có vấn đề gì, tuy nhiên tôi muốn đề cập đến nó.


Đã làm cho tôi. Một điều tuyệt vời ở đây là tránh phải cài đặt thêm các gói mà bạn không bao giờ có thể sử dụng lại. Cảm ơn.
gvrocha

Làm việc cho tôi trên El Capitan 10.11.6.
pabuisson

2
Cảnh báo : Tôi đã có các tệp PDF nơi nó làm rối tung vòng quay của một số trang
adius

28

Chỉ cần cài đặt Ghostscript bằng cách sử dụng lệnh Brew:

brew install gs

Sau đó chạy lệnh với tất cả các tệp được liệt kê:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf source1.pdf source2.pdf source3.pdf

OS X / macOS vốn đã có cách kết hợp các tệp PDF từ dòng lệnh, vậy tại sao phải lãng phí thời gian trước tiên phải cài đặt Công cụ dòng lệnh cho Xcode, Homebrew và sau đó là Ghostscript, để làm một việc gì đó có thể được thực hiện một cách tự nhiên mà không cần phải có để cài đặt bất kỳ gói nói trên?
dùng3439894

5
@ user3439894 nhiều người đã cài đặt các gói phổ biến này và đang sử dụng gsvì vậy để tham khảo trong tương lai, giải pháp này sẽ rất tiện lợi.
htor

1
@ user3439894 tôi thấy nhầm lẫn. Tôi đang giải quyết cho bạn bởi vì bạn đang đặt câu hỏi về giá trị của câu trả lời này. sử dụng homebrew để cài đặt các tiện ích dòng lệnh rất phổ biến hiện nay, vì vậy tôi sẽ không gọi nó là lãng phí thời gian. Đối với nhiều người, câu trả lời này cung cấp một giải pháp tốt như bạn.
htor

7
Điều này làm việc cho tôi, lệnh py đã không
Thieme Hennis

2
Theo nhận xét của Thieme Hennis, tập lệnh tham gia gặp sự cố với tôi ở High Sierra với lỗi phân đoạn. Nhưng gs hoạt động hoàn hảo.
arcdale

2

Kịch bản python của Apple trong hành động Automator rất chậm, vì nó sử dụng API CGPDFDocument của CoreGraphics, thay vì khung PDFKit mới hơn. Nó cũng nhập toàn bộ thư viện CoreGraphics, thay vì chỉ các API cần thiết.

Một kịch bản python thay thế, nhanh hơn, có thể được tìm thấy ở đây:

Tập lệnh này cũng thêm Mục lục vào PDF, liệt kê từng tệp thành phần (và hợp nhất các ToC hiện có) mà Apple không có.

Nó có thể được sử dụng trên dòng lệnh (với tên tệp PDF làm đối số) hoặc trong hành động tập lệnh shell của Trình tự động, để tạo Hành động / Dịch vụ nhanh cho Trình tìm kiếm.


1
Như một thử nghiệm, sử dụng time lệnh kết hợp với joinpdfs.py tập lệnh của bạn , join.py tập lệnh tích hợp và hai tệp ~ 200 MB mỗi joinpdfs.py tập lệnh, tập lệnh của bạn nhanh hơn 9 giây so với join.py tập lệnh tích hợp , tất nhiên có thêm lợi ích của việc giữ nguyên TOC . Tốt đẹp! +1
dùng3439894

BTW 9 giây nghe có vẻ không nhiều nhưng nó bằng 1/3 tổng thời gian của tập lệnh tích hợp , vì vậy 1/3 thời gian nhanh hơn là rất đáng kể.
dùng3439894

1

FWIW, tôi đã viết một chương trình nhỏ nhanh chóng cho phép bạn làm điều này mà không phải phụ thuộc vào các phụ thuộc bên ngoài như python hệ thống và như vậy. Trên github ở đây: pdfmerge và khá đơn giản để sử dụng, có thể chuyển cho nó một danh sách các tệp PDF để hợp nhất pdfmerge in1.pdf in2.pdf ... out.pdf, chuyển cho nó một danh sách các tệp để hợp nhất trong một tệp văn bản như pdfmerge infileslist.txt out.pdfhoặc chỉ cần thực hiện thư mục hiện tại theo thứ tự ABC pdfmerge out.pdf. Tôi đã viết nó như một dự án học tập, miễn phí và mở và bạn có thể nhận được nhị phân mới nhất từ ​​tab phát hành trên github.


Vì Python mặc định được cài đặt trong và là một phần của macOS, nên tôi không nhất thiết coi nó là một phụ thuộc bên ngoài mỗi se. Nói cách khác, để sử dụng những gì đã có sẵn trong macOS để tham gia các tệp PDF, join.pytập lệnh từ hành động Kết hợp các trang PDF trong Automator, không có gì khác cần phải tải xuống hoặc cài đặt, nhưng bạn phải sử dụng tải về và cài đặt nó Cũng không thấy một nhị phân tại liên kết.
dùng3439894

1
BTW Tôi đã kiểm tra mã của bạn và thật thú vị khi bạn đang sử dụng hai trong số các thành phần cốt lõi (Foundation và Quartz) mà tập lệnh python cũng đã sử dụng. Có bất cứ điều gì trong mã của bạn về bản chất là tốt hơn để thay đổi cách sử dụng của nó so với những gì đã được cung cấp theo mặc định mà không phải tải xuống bất cứ thứ gì, trong khi với mã của bạn phải thực hiện các bước bổ sung và bổ sung để sử dụng nó?
dùng3439894

1
Đối với những người không sử dụng Python cho bất cứ điều gì khác, có lẽ sẽ hợp lý hơn khi sử dụng tập lệnh do Apple cung cấp. Nhưng đối với những người sử dụng Python, việc quản lý nhiều phiên bản có thể là một rắc rối lớn (hệ thống Python là 2.7, Python hiện đại là 3.x) với các công cụ và cài đặt mô-đun khác nhau. Trên máy của tôi, ví dụ, $ PATH của tôi trỏ đến một Python hoàn toàn khác. Điều này có thể được giải quyết với việc sử dụng shebang một cách thận trọng và như vậy, nhưng tôi thấy nó gây phiền nhiễu. YMMV, tất nhiên. Ngoài ra, liên kết trực tiếp đến trang tải xuống nhị phân: github.com/paultopia/pdfmerge/release/latest
Paul Gowder

1

dựa trên câu trả lời hay của @Bartosz Petryński , chúng ta có thể tạo ra tiện ích tối thiểu của riêng mình trên đầu GhostScript:cpdf

brew install gs
cpdf () { 
  gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$1" "${@:2}"
}

sau đó sử dụng nó như sau:

cpdf merged.pdf file1.pdf file2.pdf file3.pdf

0

Tôi tìm thấy Công cụ dòng lệnh Coherent PDF miễn phí là lựa chọn tốt nhất. Nó rất nhanh, không mất dữ liệu và không làm rối loạn định hướng hoặc siêu liên kết như một số giải pháp khác đã làm. Định dạng là:

cpdf file1.pdf file2.pdf -o output.pdf
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.