tùy chọn nén pdftk


93

Tôi sử dụng pdftk để nén pdf bằng dòng lệnh sau

pdftk file1.pdf output file2.pdf compress

Nó hoạt động khi trọng lượng tệp của tôi giảm xuống.

Có [tùy chọn] để thay đổi độ nén không ???

Hoặc có thể các giải pháp khác để nén tệp của tôi? Nó nặng vì một số đồ họa có rất nhiều điểm . Có cách nào để chuyển đổi các biểu đồ này thành jpg và điều chỉnh việc nén không?


1
Theo kinh nghiệm của tôi, nó phụ thuộc vào những gì bên trong pdf của bạn. Nếu đó là một biểu đồ có nhiều dấu chấm, giải pháp tốt nhất là chuyển đổi biểu đồ thành png và đưa png này vào pdf.
RockScience

Câu trả lời:


122

Tôi đã gặp vấn đề tương tự và tìm thấy hai giải pháp khác nhau (xem chủ đề này để biết thêm chi tiết). Cả hai đều giảm đáng kể kích thước tệp PDF không nén của tôi.

  • Pixelated (mất điểm):

    convert input.pdf -compress Zip output.pdf
    
  • Không liên kết (không mất dữ liệu, nhưng có thể hiển thị hơi khác):

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH  -dQUIET -sOutputFile=output.pdf input.pdf
    

Chỉnh sửa : Tôi vừa phát hiện ra một tùy chọn khác (để nén không mất dữ liệu), tránh lệnh gs khó chịu. qpdf là một công cụ chuyển đổi PDF (nén / giải nén, mã hóa / giải mã) và nhanh hơn nhiều so với lệnh gs:

qpdf --linearize input.pdf output.pdf

3
Tuyệt vời. gs đã làm việc cho tôi, chuyển đổi một tệp 4MB thành 339K. Có một sự giảm sút về chất lượng, nhưng nó phục vụ mục đích của tôi một cách đầy đủ.
Sridhar Sarnobat 17/10/12

27
Bạn có thể sử dụng "máy in" thiết lập PDF cho một chất lượng tốt hơn:gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
imriss

10
Để điều chỉnh chất lượng (và do đó kích thước), hãy thay đổi giá trị PDFSETTINGS. Xem ghostscript.com/doc/current/Ps2pdf.htm#Options
1in9ui5t

6
Lưu ý rằng gslệnh trong câu trả lời không chính xác là không mất dữ liệu, vì nó làm giảm độ phân giải và chất lượng của các JPG được nhúng. Nhưng nó là không mất mát lại. văn bản, giữ nó dưới dạng văn bản, trong khi convertlệnh chuyển đổi nó thành đồ họa raster.
tanius

13
Thiết lập tùy chọn -dPDFSETTINGS=để /ebookđưa ra một sản lượng rất tốt đẹp cho tôi: chắc chắn, nó nén và một số hiện vật jpg có thể nhìn thấy, nhưng nó hoàn toàn có thể đọc được cho một kích thước hợp lý. Cảm ơn!
Joël

35

thủ tục này hoạt động khá tốt

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

hãy thử một lần.


8
Đây không phải là một giải pháp chung. Trong nhiều trường hợp, pdf kết quả lớn hơn.
rotskoff

4
Điều này hoạt động tốt nhất trong số tất cả các giải pháp được đề cập đối với tôi. Một số hình ảnh lớn đã giảm từ 23MB xuống còn 1,4MB với chất lượng kém nhất cho đến nay.
AerandiR

1
@rotkoff Có lẽ không có giải pháp chung vì có nhiều loại tài liệu khác nhau. Tuy nhiên tôi thấy quan điểm của bạn. Sẽ thật tuyệt nếu có phần mềm tìm ra thứ gì phù hợp nhất với chúng ta.
tiktak

Cảm ơn, điều này đã làm việc cho tôi, trong khi qpdf và gs không làm giảm kích thước của tệp đầu ra.
sebastian

1
Như đã đề cập ở đây, một nhược điểm khác của phương pháp này là nó sẽ phá vỡ các liên kết URL bên trong tài liệu.
ptomato

29

Đang cố nén một tệp PDF tôi đã tạo với 400ppi, chủ yếu là 8 bit, một số ít 24 bit, với tính năng nén PackBits, sử dụng tiff2pdfnén bằng Zip / Deflate. Một vấn đề mà tôi gặp phải với mọi phương pháp này: không có phương pháp nào ở trên bảo toàn TOC đánh dấu mà tôi đã dày công tạo thủ công trong Acrobat Pro X. Thậm chí không phải là ebookcài đặt được khuyến nghị gs. Chắc chắn, tôi chỉ có thể mở một bản sao của bản gốc với TOC nguyên vẹn và thực hiện Replace pagesnhưng không may, không có phương pháp nào trong số này thực hiện một công việc thỏa đáng để bắt đầu. Hoặc là họ đã giảm kích thước đến mức chất lượng không thể chấp nhận được, hoặc họ không giảm kích thước chút nào và trong một trường hợp thực sự tăng nó lên mặc dù chất lượng giảm.

pdftk compress:

no change in size
bookmarks TOC are gone

gs screen:

takes a ridiculously long time and 100% CPU
errors:
    sfopen: gs_parse_file_name failed.                                 ? 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->10.2MB hideously pixellated
bookmarks TOC are gone

gs printer:

takes a ridiculously long time and 100% CPU
no errors
74.8MB-->66.1MB
light blue background on pages 1-4
bookmarks TOC are gone

gs ebook:

errors:
    sfopen: gs_parse_file_name failed.
      ./base/gsicc_manage.c:1050: gsicc_open_search(): Could not find default_rgb.ic 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->32.2MB
badly pixellated
bookmarks TOC are gone

qpdf --linearize:

very fast, a few seconds
no size change
bookmarks TOC are gone

pdf2ps:

took very long time
output_pdf2ps.ps 74.8MB-->331.6MB

ps2pdf:

pretty fast
74.8MB-->79MB
very slightly degraded with sl. bluish background
bookmarks TOC are gone

1
Đây là nghiên cứu cực kỳ có giá trị (cảm ơn bạn!) Nhưng nó cũng không phải là một câu trả lời mà trong một lúc tôi đã nghĩ đến việc bỏ phiếu từ chối.
ndemou

3
Làm thế nào nó không phải là một câu trả lời?
hmj6jmh

21

Nếu kích thước tệp vẫn quá lớn, nó có thể giúp sử dụng ps2pdf để giảm tỷ lệ độ phân giải của tệp pdf đã tạo:

pdf2ps input.pdf tmp.ps
ps2pdf -dPDFSETTINGS=/screen -dDownsampleColorImages=true -dColorImageResolution=200 -dColorImageDownsampleType=/Bicubic tmp.ps output.pdf

Điều chỉnh giá trị của tùy chọn -dColorImageResolution để đạt được kết quả phù hợp với nhu cầu của bạn (giá trị mô tả độ phân giải hình ảnh trong DPIs). Nếu tập tin đầu vào của bạn là trong màu xám, thay thế màu thông qua Grey hoặc sử dụng cả hai lựa chọn trong lệnh trên có thể cũng giúp đỡ. Có thể tinh chỉnh thêm bằng cách thay đổi tùy chọn -dPDFSETTINGS thành / mặc định hoặc / máy in . Để biết giải thích về tất cả các tùy chọn có thể, hãy tham khảo hướng dẫn sử dụng ps2pdf .


Cảm ơn cho tiền boa. Với -dPDFSETTINGS, tôi có thể giảm kích thước tệp PDF đã quét của mình
eshwar

1
CẢM ƠN BẠN. Tôi không nghĩ rằng có một giải pháp chung cho trường hợp sử dụng của mọi người - nhưng tôi đã thử hầu hết mọi giải pháp trên chủ đề này và đây là giải pháp duy nhất phù hợp với tôi !!! Có thể "điều chỉnh" thông số dColorImageResolution là chìa khóa - phải có kích thước tài liệu đủ nhỏ để trang web chính phủ này chấp nhận nó nhưng đủ lớn để dễ đọc. Cảm ơn chú Sam, vì còn một vòng đau đớn nữa để vượt qua :)
Michael Klear

3

Sau khi thử gpdf như nullglob đề xuất, tôi nhận thấy rằng tôi nhận được kết quả nén tương tự (tệp ~ 900mb giảm xuống còn ~ 30mb) chỉ bằng cách sử dụng máy in cup-pdf. Điều này có thể dễ dàng hơn / ưa thích hơn nếu bạn đang xem tài liệu và chỉ cần nén một hoặc hai tài liệu.

Trong Ubuntu 12.04, bạn có thể cài đặt nó bằng cách

sudo apt-get install cups-pdf

Sau khi cài đặt, hãy nhớ kiểm tra Công cụ Hệ thống > Quản trị > In > nhấp chuột phải vào 'PDF' và đặt nó thành 'bật'

Theo mặc định, đầu ra được lưu vào một thư mục có tên PDF trong thư mục chính của bạn.


3

Tùy chọn pdf2ps một dòng (của Lee) thực sự đã tăng kích thước pdf. Tuy nhiên, hai bước một đã làm tốt hơn. Và nó có thể được kết hợp trong một cái duy nhất bằng cách sử dụng chuyển hướng từ & đến đầu vào / đầu ra tiêu chuẩn và đường ống:

pdf2ps Large.pdf - | ps2pdf - small.pdf

đã làm giảm một tệp PDF được tạo bởi xsane từ 18 Mo xuống 630 ko!

Các liên kết bị mất, nhưng đối với ví dụ hiện tại, đó không phải là mối quan tâm ... và là cách dễ nhất để đạt được kết quả mong muốn.


Bạn có thể thử ps2pdfthay vào đó, hãy xem nhận xét của tôi cho câu trả lời của @ Lee.
myrdd

2

pdf2ps large.pdf small.pdf là đủ, thay vì hai bước

pdf2ps large.pdf very_large.ps 
ps2pdf very_large.ps small.pdf

Tuy nhiên, ps2pdf large.pdf small.pdflà một lựa chọn tốt hơn.

  • ps2pdf nhanh hơn nhiều
  • mà không có tham số bổ sung được chỉ định, pdf2psđôi khi tạo ra tệp lớn hơn.

Bạn tìm thấy tùy chọn này ở đâu? Nó có phải là một tính năng trong một số phiên bản gần đây không? Nó không làm việc cho tôi. Mặc dù tôi đã đặt tên tệp đầu ra out.pdf, nó đã trở thành tệp PS ( mimetype out.pdfnói out.pdf: application/postscript).
myrdd

của tôi là phiên bản mới nhất 9.xx. không chắc chắn của bạn.
Lee

Tôi đang sử dụng phiên bản đóng gói ổn định debian ("Stret"), là 9,25. Bạn có thể kiểm tra xem bạn có thực sự có tệp pdf không bằng cách nhập mimetype small.pdf?
myrdd

đầu ra của mimetype small.pdfsmall.pdf: application/pdf. Tôi nghĩ rằng chương trình có thể xác định loại tệp tự động theo hậu tố.
Lee

1
@myrdd vâng, tôi đã làm bài kiểm tra. ps2pdftốt hơn.
Lee

1

Tôi không thấy giảm nhiều kích thước tệp khi sử dụng qpdf. Cách tốt nhất tôi tìm thấy là sau khi pdftk được thực hiện xong, sử dụng ghostcript để chuyển pdf sang tái bút rồi quay lại pdf. Trong PHP, bạn sẽ sử dụng thi hành:

$ps = $save_path.'/psfile.ps';
exec('ps2ps2 ' . $pdf . ' ' . $ps);
unlink($pdf);
exec('ps2pdf ' .$ps . ' ' . $pdf);
unlink($ps);

Tôi đã sử dụng điều này một vài phút trước để đưa đầu ra pdftk từ 490k đến 71k.


PHP cho biết thêm một phức tạp hoàn toàn không cần thiết và thu hẹp phạm vi áp dụng của câu trả lời này
ndemou

-2

Tôi đã gặp vấn đề tương tự và tôi đã sử dụng chức năng này để nén các trang riêng lẻ, dẫn đến kích thước tệp được nén tối đa bằng 1/3 kích thước ban đầu.

for (int i = 1; i <= theDoc.PageCount; i++)
{
       theDoc.PageNumber = i;
       theDoc.Flatten();
}

bạn có đang sử dụng thư viện C ++ của pdftk không?
RockScience

-2

Trong trường hợp bạn muốn nén một tệp PDF có chứa nhiều văn bản có thể chọn, trên Windows, bạn có thể sử dụng NicePDF Compressor - chọn tùy chọn "Flate". Sau khi thử mọi thứ (cpdf, pdftk, gs), cuối cùng nó đã giúp tôi nén tệp PDF 1360 trang của mình từ 500 MB xuống 10 MB.

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.