Nếu bạn chỉ muốn nối hai tệp PDF mà không xử lý lại nội dung của nó, pdftk
là dành cho bạn. (Trên Mac OS X, tính năng này phải có sẵn thông qua MacPorts hoặc Fink, đối với Linux, có các gói gốc cho tất cả các bản phân phối chính; đối với Windows, hãy xem tại đây. ) Hãy thử điều này:
pdftk title.pdf content.pdf cat output book.pdf
Điều này sẽ thêm tiêu đề.pdf vào content.pdf và viết kết quả vào book.pdf .
pdftk
là một cách "ngu ngốc", nhưng rất nhanh để ghép hai (hoặc nhiều) tệp PDF. "Ngốc" cho đến nay, vì pdftk
không có cách nào giải thích luồng dữ liệu PDF, nó chỉ đảm bảo rằng các số đối tượng bên trong được chia sẻ lại khi cần và xuất hiện trong xref
cấu trúc PDF (về cơ bản là một loại ToC PDF cho các đối tượng).
Bản thảo
Nếu bạn muốn sử dụng Ghostscript, lệnh cơ bản để ghép hai tệp giống nhau sẽ là:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
title.pdf \
content.pdf
Tuy nhiên, như bạn đã trải nghiệm, dòng lệnh đơn giản này có thể làm rối loạn chất lượng hình ảnh của bạn. Lý do là Ghostscript không bị 'đổ' khi xử lý các tệp PDF: nó hoàn toàn giải thích chúng khi đọc và tạo một tệp hoàn toàn mới khi viết kết quả. Để tạo kết quả, nó sẽ tự động sử dụng các cài đặt mặc định cho nhiều chi tiết trong quá trình xử lý tổng thể. Những mặc định này sẽ được áp dụng cho tất cả các trường hợp mà các yêu cầu của nó đã không hướng dẫn Ghostscript theo cách khác.
Vì vậy, phương pháp của Ghostscript để tạo ra book.pdf mới "thông minh" hơn (nhưng cũng chậm hơn nhiều) so với pdftk
phương pháp của. . chúng chỉ bằng các tham chiếu, v.v. - và tổng thể tạo ra các tệp nhỏ hơn, được tối ưu hóa tốt hơn từ các tệp PDF đầu vào cồng kềnh ...)
Giải pháp là không để Ghostscript sử dụng mặc định của nó: bằng cách thêm nhiều tham số tùy chỉnh vào dòng lệnh.
Nó có nghĩa là "Ghostscript 'diễn giải' đầu vào PDF của nó" là gì?
Tất cả các tệp và nội dung của nó (đối tượng, luồng, phông chữ, hình ảnh, ...) đều được đọc, kiểm tra và giữ trong biểu diễn bên trong của chính nó, trước khi đưa ra tệp PDF kết quả với các đối tượng PDF của nó một lần nữa. Tuy nhiên, khi 'nhổ ra', Ghostscript sẽ áp dụng tất cả các cài đặt mặc định bên trong của nó cho hàng trăm tham số [*] có sẵn.
Thật không may, điều này gây ra "xử lý lại" hình ảnh của bạn theo các cài đặt mặc định này - chỉ có thể tránh hoặc ghi đè bằng cách thêm các tham số dòng lệnh (mong muốn) của riêng bạn.
Sự cố hình ảnh của bạn có thể do nhu cầu của Ghostscript (do vấn đề cấp phép) để mã hóa lại hình ảnh JPEG2000 thành mã hóa JPEG. Nếu bạn muốn tránh điều này, hãy thêm dòng sau vào dòng lệnh của bạn:
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
Các tùy chọn dòng lệnh liên quan đến hình ảnh khác để xem xét bao gồm:
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
Vì vậy, dòng lệnh Ghostscript hoàn chỉnh có thể khiến bạn hài lòng nên đọc:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
title.pdf \
content.pdf
Bạn cũng có thể yêu cầu Ghostscript KHÔNG nén hình ảnh trong tệp PDF đầu ra, bằng cách sử dụng dòng lệnh này:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dEncodeColorImages=false \
-dEncodeGrayImages=false \
-dEncodeMonoImages=false \
title.pdf \
content.pdf
.
[*]:
Nếu bạn muốn tìm hiểu về danh sách đầy đủ các cài đặt mặc định mà thiết bị pdfwrite của Ghostscript đang sử dụng , hãy chạy lệnh sau. Nó trả về cho bạn danh sách đầy đủ :
gs \
-sDEVICE=pdfwrite \
-o /dev/null \
-c "currentpagedevice { exch ==only ( ) print == } forall"
Để giải thích về ý nghĩa chính xác của tất cả các tham số này, bạn sẽ phải đọc tài liệu Adobe về "Thông số chưng cất" . Ghostscript cố gắng hết sức để bắt chước tất cả ...