Batch thay đổi kích thước và nén tập tin PDF


15

Tôi cần một cách để giảm kích thước và nén các lô tệp PDF. Tôi muốn làm điều này trên Windows, nhưng Linux sẽ ổn nếu nó có nghĩa là một quy trình công việc mượt mà hơn.

Tôi biết rằng có các chương trình như NitroPDF và Acrobat cho phép bạn thực hiện điều này, nhưng tôi e rằng nó sẽ phải được thực hiện trên cơ sở từng tệp. Các chương trình này cũng không rẻ và tôi không muốn mua chúng chỉ để tôi có thể sử dụng một hoặc hai tính năng.

Thông tin cơ bản: Tôi sử dụng CamScanner để số hóa hóa đơn và hóa đơn để nhập vào tài khoản (FreeAgent). Các pdf CamScanner là tất cả các khổ A4 và nhiều trang thường vượt quá giới hạn đính kèm 2MB.

Câu trả lời:


15

Tôi đang đề xuất một công cụ dòng lệnh ở đây, có thể dễ dàng được nhóm với các vòng lặp trong các ngôn ngữ kịch bản dựng sẵn trong Windows, Linux, OS X, v.v.


ImageMagick hỗ trợ các tệp PDF và có một resizetùy chọn với công cụ chuyển đổi . Tôi chưa bao giờ sử dụng nó cá nhân, nhưng bạn có thể thử chơi với nó.

Bạn cũng có thể sử dụng compresstùy chọn (có một ví dụ ở đây ):

Xoay một tệp PDF

$ convert -rotate 270 -density 300x300 -compress lzw in.pdf out.pdf

Điều này giả sử PDF được hỗ trợ bởi TIFF. Tham số mật độ rất quan trọng vì nếu không ImageMagick sẽ lấy mẫu hình ảnh (vì một số lý do). Thêm vào tùy chọn nén giúp giữ cho kích thước tổng thể của PDF nhỏ hơn, không làm giảm chất lượng.

Đối với nhiều tệp PDF, bạn có thể muốn sử dụng pdftk, sau đó sử dụng mogrifytừ ImageMagick để chuyển đổi từng trang tại chỗ:

$ pdftk in.pdf burst
$ mogrify -rotate 270 -density 300x300 -compress lzw pg_*.pdf
$ pdftk pg*.pdf cat output out.pdf
$ rm pg*.pdf


Để chuyển đổi tệp PDF bằng ImageMagick, bạn cần cài đặt GhostScript .


ImageMagick có thể chuyển đổi nhiều tệp PDF. Mặc dù mogrifysẽ chuyển đổi tại chỗ, tôi khuyên bạn convertnên sử dụng để bạn có thể giữ bản gốc trong trường hợp tai nạn.


Tôi đã thực hiện một số thử nghiệm trên mẫu PDF được cung cấp của bạn. Điều này làm việc khá tốt cho tôi:

convert -density 200 -compress jpeg -quality 20 test.pdf test2.pdf

Mật độ mặc định là 72 DPI. Bằng cách đặt nó cao hơn, chúng tôi có thể có được độ phân giải cao hơn và do đó chất lượng chấp nhận được. Nó trông ổn 150, và nhỏ hơn một chút, nhưng nếu bạn muốn phục vụ cho một loạt các tệp PDF 200thì nên hoạt động.

Nén JPEG nên hoặc là tự động chọn một mức độ hoặc đặt mặc định 92trên thang điểm 1đến 100với100 được sản phẩm tốt nhất. Đặt nó ở 20, nó trông gần giống như bản gốc (một chút mờ hơn và văn bản nhỏ ở phía dưới hơi khó đọc, nhưng dù sao nó cũng ban đầu).

Các tùy chọn này đưa mẫu 1,7 MB của bạn xuống 0,5 MB , trong khi vẫn giữ được mẫu có thể đọc được. Bạn có thể thử nghiệm một chút.

Nếu bạn muốn kích thước nhỏ hơn (cả tệp và hình ảnh / PDF), bạn có thể sử dụng -resize #% , vd -resize 75%. Trên ví dụ PDF của bạn, điều này làm cho bản in nhỏ ở phía dưới khá nhiều không thể đọc được.

Nếu bạn vẫn còn không gian trống, đặc biệt là các tệp PDF nhiều trang, bạn có thể nén thêm bằng cách thêm các tệp vào tệp lưu trữ ZIP (hoặc khác). Điều này đã đưa kích thước tệp xuống 0,43 MB trên bản PDF thử nghiệm đó (giảm chất lượng nén JPEG có hiệu ứng mạnh hơn nhiều). Bạn cũng có thể chia tệp PDF thành các trang với pdftk, như @glallen đề xuất trong chỉnh sửa của mình hoặc phân chia kho lưu trữ và kết hợp lại ở đầu kia.

2MB cũng là một giới hạn đính kèm khá nhỏ, bạn có thể muốn xem xét các nhà cung cấp email khác. Từ bộ nhớ, GMail cung cấp hơn 10 MB mỗi email.

Các tùy chọn này, và nhiều hơn nữa, được ghi lại đầy đủ trên trang web của họ .


Đó có vẻ là một cách tiếp cận tuyệt vời, nhưng tôi không nghĩ pdf của mình được hỗ trợ TIFF. CamScanner trước tiên chụp ảnh JPEG và sau đó chuyển đổi chúng thành PDF để xuất. Việc xử lý các tệp PDF này dường như làm giảm mẫu của chúng như bài đăng trên blog cho biết, bất kể việc nén là gì. Chuyển đổi từ PDF sang TIFF và sau đó trở lại thành PDF dường như vẫn giữ được chất lượng nhưng làm tăng kích thước tệp và làm rối kích thước và mật độ trang.
Stan

@paganompu Theo tôi hiểu, bạn muốn giảm kích thước tệp. Làm thế nào về nén như JPEG? Làm thế nào đã resizebật ra? Bạn có tệp mẫu (không nhạy cảm) mà chúng tôi có thể chơi với không? Là mẫu xuống có thể chấp nhận?
Bob

JPEG sẽ ổn, nhưng tôi cần tải lên các tài liệu nhiều trang và tôi chỉ có thể có một tệp đính kèm cho mỗi mục nhập tài khoản. Downsampling là nghiêm trọng: tài liệu thử nghiệm này không thể đọc được sau khi chuyển đổi với nén không mất dữ liệu.
Stan

@paganompu Tôi đã thử nghiệm một chút bản thân mình và tôi đã cập nhật câu trả lời bằng một lệnh làm việc. Xem ở đây để kiểm tra tập tin của bạn.
Bob

Lệnh đó hoạt động như một lá bùa. Có vẻ như "downsampling" của tôi là do bỏ qua density... Tôi thề tôi có thể đọc và làm theo hướng dẫn! Bit bối rối ngay bây giờ: S Cảm ơn bạn đã dành thời gian để giúp tôi Bob
Stan

19

Vì vậy, converttừ ImageMagick sẽ tạo ra PDF rasterized và nhiều người sẽ quan tâm đến việc giữ cho đồ họa và văn bản vector không bị ảnh hưởng để chỉ các hình ảnh nhúng được nén. Vì vậy, thay thế tốt cho việc thực hiện nén là sử dụng gstừ ghostscriptví dụ gói sử dụng:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf

trong tham số lệnh trên: -dPDFSETTINGS=/ebooklà quan trọng. Nó có thể có 3 giá trị:

-dPDFSETTINGS=/screen   (screen-view-only quality, 72 dpi images)
-dPDFSETTINGS=/ebook    (low quality, 150 dpi images)
-dPDFSETTINGS=/printer  (high quality, 300 dpi images)
-dPDFSETTINGS=/prepress (high quality, color preserving, 300 dpi imgs)
-dPDFSETTINGS=/default  (almost identical to /screen)
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.