opsi kompresi pdftk


94

Saya menggunakan pdftk untuk mengompres pdf menggunakan baris perintah berikut

pdftk file1.pdf output file2.pdf compress

Ini berfungsi saat bobot file saya menurun.

Apakah ada [pilihan] untuk mengubah kompresi ???

Atau mungkin solusi lain untuk mengompres file saya? Itu berat karena beberapa grafik memiliki banyak poin . Apakah ada cara untuk mengonversi grafik ini ke jpg misalnya dan mengadaptasi kompresinya?


1
Dari pengalaman saya, itu tergantung apa yang ada di dalam pdf Anda. Jika itu adalah grafik dengan banyak titik misalnya, solusi terbaik adalah mengonversi grafik menjadi png dan memasukkan png ini ke dalam pdf.
RockScience

Jawaban:


122

Saya memiliki masalah yang sama dan menemukan dua solusi berbeda (lihat utas ini untuk lebih jelasnya). Keduanya mengurangi ukuran PDF saya yang tidak terkompresi secara dramatis.

  • Pixelated (lossy):

    convert input.pdf -compress Zip output.pdf
    
  • Unpixelated (lossless, tetapi mungkin ditampilkan sedikit berbeda):

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

Sunting : Saya baru saja menemukan opsi lain (untuk kompresi lossless), yang menghindari perintah gs yang buruk. qpdf adalah alat yang rapi yang mengubah PDF (kompresi / dekompresi, enkripsi / dekripsi), dan jauh lebih cepat daripada perintah gs:

qpdf --linearize input.pdf output.pdf

3
Hebat. gs bekerja untuk saya, mengubah file 4MB menjadi 339K. Ada penurunan kualitas, tetapi itu cukup memenuhi tujuan saya.
Sridhar Sarnobat

27
Anda dapat menggunakan setelan PDF "printer" untuk kualitas yang lebih baik:gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
imriss

10
Untuk menyesuaikan kualitas (dan karenanya ukuran), variasikan nilai PDFSETTINGS. Lihat ghostscript.com/doc/current/Ps2pdf.htm#Options
1in9ui5t

6
Perhatikan bahwa gsperintah dalam jawaban tidak sepenuhnya lossless, karena menurunkan resolusi dan kualitas JPG yang disematkan. Tapi itu adalah re lossless. teks, menyimpannya sebagai teks, sedangkan convertperintah mengubahnya menjadi grafik raster.
tanius

14
Opsi pengaturan -dPDFSETTINGS=untuk /ebookmemberikan hasil yang sangat bagus untuk saya: tentu saja, ini dikompresi dan beberapa artefak jpg terlihat, tetapi itu benar-benar dapat dibaca untuk ukuran yang wajar. Terima kasih!
Joël

35

prosedur ini bekerja dengan cukup baik

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

Cobalah.


8
Ini bukan solusi umum. Dalam banyak kasus, pdf yang dihasilkan berukuran lebih besar.
rotskoff

4
Ini bekerja yang terbaik dari semua solusi yang disebutkan untuk saya. Beberapa gambar besar turun dari 23MB menjadi 1,4MB dengan kehilangan kualitas paling sedikit.
AerandiR

1
@rotskoff Mungkin tidak ada solusi umum karena ada berbagai jenis dokumen. Bagaimanapun saya mengerti maksud Anda. Alangkah baiknya memiliki perangkat lunak yang menentukan mana yang terbaik untuk kita.
tiktak

Terima kasih, ini berhasil untuk saya, sementara qpdf dan gs tidak mengurangi ukuran file keluaran.
sebastian

1
Seperti yang disebutkan di sini, kelemahan lain dari metode ini adalah ia akan merusak tautan URL di dalam dokumen.
ptomato

31

Mencoba mengompres PDF yang saya buat dengan 400ppi tiffs, kebanyakan 8-bit, beberapa 24-bit, dengan kompresi PackBits, menggunakan tiff2pdfkompresi dengan Zip / Deflate. Satu masalah yang saya hadapi dengan setiap metode ini: tidak ada metode di atas yang mempertahankan TOC bookmark yang saya buat dengan susah payah secara manual di Acrobat Pro X. Bahkan tidak ada ebookpengaturan yang direkomendasikan gs. Tentu, saya hanya bisa membuka salinan asli dengan TOC utuh dan melakukan Replace pagestapi sayangnya, tidak satupun dari metode ini melakukan pekerjaan yang memuaskan untuk memulai. Entah mereka mengurangi ukuran sedemikian rupa sehingga kualitasnya menjadi sangat buruk, atau mereka tidak mengurangi ukuran sama sekali dan dalam satu kasus benar-benar meningkatkannya meskipun kualitasnya menurun.

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

2
Ini adalah penelitian yang sangat berharga (terima kasih!) Tetapi ini juga bukan jawaban yang sejenak saya pikirkan untuk tidak memilih.
ndemou

3
Bagaimana ini bukan jawaban?
hmj6jmh

22

Jika ukuran file masih terlalu besar bisa membantu menggunakan ps2pdf untuk menurunkan resolusi dari file pdf yang dihasilkan:

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

Sesuaikan nilai opsi -dColorImageResolution untuk mendapatkan hasil yang sesuai dengan kebutuhan Anda (nilai menjelaskan resolusi gambar dalam DPI). Jika file masukan Anda dalam skala abu-abu, mengganti Warna melalui Abu - abu atau menggunakan kedua opsi pada perintah di atas juga dapat membantu. Penyempurnaan lebih lanjut dapat dilakukan dengan mengubah opsi -dPDFSETTINGS ke / default atau / printer . Untuk penjelasan tentang semua opsi yang mungkin, lihat manual ps2pdf .


1
Terima kasih atas tipnya. Dengan -dPDFSETTINGS saya dapat mengurangi ukuran PDF yang dipindai
eshwar

2
TERIMA KASIH. Saya tidak berpikir ada solusi umum untuk kasus penggunaan semua orang - tetapi saya mencoba hampir semua solusi di utas ini dan ini adalah satu-satunya yang berhasil untuk saya !!! Kemampuan untuk "menyesuaikan" parameter dColorImageResolution adalah kuncinya - harus mendapatkan ukuran dokumen yang cukup kecil agar situs pemerintah ini dapat menerimanya tetapi cukup besar agar dapat terbaca. Terima kasih, paman Sam, untuk satu lagi rintangan menyakitkan yang harus dilewati :)
Michael Klear

4

Setelah mencoba gpdf seperti yang disarankan oleh nullglob , saya menemukan bahwa saya mendapatkan hasil kompresi yang sama (file ~ 900mb ke ~ 30mb) hanya dengan menggunakan printer cups-pdf. Ini mungkin lebih mudah / disukai jika Anda sudah melihat dokumen dan hanya perlu mengompres satu atau dua dokumen.

Di Ubuntu 12.04, Anda dapat menginstal ini dengan

sudo apt-get install cups-pdf

Setelah instalasi, pastikan untuk memeriksa di Alat Sistem > Administrasi > Pencetakan > klik kanan 'PDF' dan setel ke 'aktifkan'

Secara default, output disimpan ke dalam folder bernama PDF di direktori home Anda.


4

Opsi pdf2ps satu baris (oleh Lee) sebenarnya meningkatkan ukuran pdf. Namun, dua langkah pertama lebih baik. Dan itu dapat digabungkan menjadi satu menggunakan pengalihan dari & ke input / output standar dan pipa:

pdf2ps large.pdf - | ps2pdf - small.pdf

memang mengurangi PDF yang dihasilkan oleh xsane dari 18 Mo menjadi 630 ko!

Tautan hilang, tetapi untuk contoh saat ini, itu bukan masalah ... dan merupakan cara termudah untuk mencapai hasil yang diinginkan.


Anda bisa mencoba ps2pdf, lihat komentar saya untuk jawaban @ Lee.
myrdd

3

pdf2ps large.pdf small.pdf sudah cukup, alih-alih dua langkah

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

Namun, ps2pdf large.pdf small.pdfini adalah pilihan yang lebih baik.

  • ps2pdf jauh lebih cepat
  • tanpa parameter tambahan yang ditentukan, pdf2psterkadang menghasilkan file yang lebih besar.

Di mana Anda menemukan opsi ini? Apakah ini fitur dalam beberapa versi terbaru? Itu tidak berhasil untuk saya. Meskipun saya menamai file output out.pdf, itu menjadi file PS ( mimetype out.pdfmengatakan out.pdf: application/postscript).
myrdd

milik saya adalah versi terbaru 9.xx. tidak yakin Anda.
Lee

Saya menggunakan versi paket debian stable ("stretch"), yaitu 9.25. Bisakah Anda memeriksa apakah Anda memang memiliki file pdf dengan mengetik mimetype small.pdf?
myrdd

keluaran dari mimetype small.pdfadalah small.pdf: application/pdf. Saya rasa program dapat menentukan jenis file secara otomatis menurut sufiks.
Lee

1
@myrdd ya, saya melakukan tes. ps2pdflebih baik.
Lee

1

Saya tidak melihat banyak pengurangan ukuran file menggunakan qpdf. Cara terbaik yang saya temukan adalah setelah pdftk selesai, gunakan ghostscript untuk mengonversi pdf ke postscript lalu kembali ke pdf. Di PHP Anda akan menggunakan exec:

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

Saya menggunakan ini beberapa menit yang lalu untuk mengambil output pdftk dari 490k menjadi 71k.


2
PHP menambahkan kompleksitas yang sama sekali tidak perlu dan mempersempit penerapan jawaban ini
ndemou

-2

Saya memiliki masalah yang sama dan saya menggunakan fungsi ini untuk mengompresi halaman individual yang menghasilkan ukuran file yang dikompresi hingga 1/3 dari ukuran aslinya.

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

1
apakah Anda menggunakan pustaka C ++ dari pdftk?
RockScience

-3

Jika Anda ingin mengompres PDF yang berisi banyak teks yang dapat dipilih, di Windows Anda dapat menggunakan Kompresor NicePDF - pilih opsi "Flate". Setelah mencoba semuanya (cpdf, pdftk, gs) akhirnya membantu saya untuk mengompres 1360 halaman PDF saya dari 500 MB menjadi 10 MB.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.