GNU/Linux >> Belajar Linux >  >> Linux

Optimalkan file PDF (dengan Ghostscript atau lainnya)

Saya menggunakan Ghostscript dengan opsi berikut yang diambil dari sini.

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

Anda mungkin menemukan bahwa pdftocairo (dari Poppler) dapat membuat PDF lebih kecil tetapi berhati-hatilah karena ini akan menghilangkan beberapa fitur (seperti hyperlink).


Anda dapat memperoleh hasil yang baik dengan mengonversi dari PDF ke Postscript, lalu kembali ke PDF menggunakan

pdf2ps file.pdf file.ps
ps2pdf -dPDFSETTINGS=/ebook file.ps file-optimized.pdf

Nilai argumen -dPDFSETTINGS menentukan kualitas gambar dalam PDF yang dihasilkan. Pilihannya adalah, dari kualitas rendah ke tinggi:/screen , /default , /ebook , /printer , /prepress , lihat http://milan.kupcevic.net/ghostscript-ps-pdf/ untuk referensi.

File Postscript bisa menjadi sangat besar, tetapi hasilnya sepadan. Saya beralih dari PDF berukuran 60 MB menjadi file Postscript berukuran 140 MB, tetapi berakhir dengan PDF yang dioptimalkan sebesar 1,1 MB.


Jika Anda mencari Perangkat Lunak Gratis (seperti dalam 'libre'), Ghostscript pasti pilihan terbaik Anda. Namun, ini tidak selalu mudah digunakan -- beberapa opsi pemrosesannya (yang sangat andal) tidak mudah ditemukan didokumentasikan.

Lihat jawaban ini , yang menjelaskan cara menjalankan kontrol yang lebih mendetail atas downsampling resolusi gambar daripada -dPDFSETTINGS=/screen umum tidak (yang menentukan beberapa default keseluruhan, yang mungkin ingin Anda ganti):

  • Bagaimana cara mengecilkan gambar dalam file pdf?

Pada dasarnya, ini memberi tahu Anda cara membuat Ghostscript menurunkan sampel semua gambar ke resolusi 72dpi (nilai ini adalah -dPDFSETTINGS=/screen penggunaan -- Anda mungkin ingin lebih rendah lagi):

-dDownsampleColorImages=true \
-dDownsampleGrayImages=true \
-dDownsampleMonoImages=true \
-dColorImageResolution=72 \
-dGrayImageResolution=72 \
-dMonoImageResolution=72 \

Jika Anda ingin mencoba apakah Ghostscript juga dapat 'membatalkan penyematan' font yang digunakan (terkadang berhasil, terkadang tidak -- tergantung kerumitan font yang disematkan, dan juga pada jenis font yang digunakan ), Anda dapat mencoba menambahkan yang berikut ke perintah gs Anda:

gs \
  -o output.pdf \
   [...other options...] \
  -dEmbedAllFonts=false \
  -dSubsetFonts=true \
  -dConvertCMYKImagesToRGB=true \
  -dCompressFonts=true \
  -c ".setpdfwrite <</AlwaysEmbed [ ]>> setdistillerparams" \
  -c ".setpdfwrite <</NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats /Arial]>> setdistillerparams" \
  -f input.pdf

Catatan: Ketahuilah bahwa resolusi gambar downsampling pasti akan mengurangi kualitas (tidak dapat diubah), dan font yang disematkan akan membuat sulit atau tidak mungkin untuk menampilkan dan mencetak PDF kecuali font yang sama diinstal pada mesin....

Perbarui

Salah satu opsi yang saya abaikan dalam jawaban awal saya adalah menambahkan

-dDetectDuplicateImages=true

ke baris perintah. Parameter ini mengarahkan Ghostscript untuk mencoba dan mendeteksi gambar apa pun yang disematkan dalam PDF beberapa kali. Hal ini dapat terjadi jika Anda menggunakan gambar sebagai logo atau latar belakang halaman, dan jika perangkat lunak penghasil PDF tidak dioptimalkan untuk situasi ini. Hal ini pernah terjadi pada OpenOffice/LibreOffice versi lama (saya menguji rilis terbaru LibreOffice, v4.3.5.2, dan tidak lagi melakukan hal bodoh seperti itu).

Ini juga terjadi jika Anda menggabungkan file PDF dengan bantuan pdftk . Untuk menunjukkan efeknya, dan bagaimana Anda dapat menemukannya, mari kita lihat contoh file PDF:

pdfinfo p1.pdf

 Producer:       libtiff / tiff2pdf - 20120922
 CreationDate:   Tue Jan  6 19:36:34 2015
 ModDate:        Tue Jan  6 19:36:34 2015
 Tagged:         no
 UserProperties: no
 Suspects:       no
 Form:           none
 JavaScript:     no
 Pages:          1
 Encrypted:      no
 Page size:      595 x 842 pts (A4)
 Page rot:       0
 File size:      20983 bytes
 Optimized:      no
 PDF version:    1.1

Versi terbaru dari pdfimages Poppler utilitas telah menambahkan dukungan untuk -list parameter, yang dapat mencantumkan semua gambar yang disertakan dalam file PDF:

pdfimages -list p1.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image    423   600   rgb    3   8 jpeg     no     7  0    52    52 19.2K 2.6%

Contoh PDF ini adalah dokumen 1 halaman, berisi gambar, yang dikompresi dengan kompresi JPEG, memiliki lebar 423 piksel dan tinggi 600 piksel, serta dirender pada resolusi 52 PPI pada halaman.

Jika kita menggabungkan 3 salinan dari file ini dengan bantuan pdftk seperti itu:

pdftk p1.pdf p1.pdf p1.pdf cat output p3.pdf

maka hasilnya menunjukkan properti gambar ini melalui pdfimages -list :

pdfimages -list p3.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no     4  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no     8  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    12  0    52    52 19.2K 2.6%

Ini menunjukkan bahwa ada 3 objek PDF yang identik (dengan ID 4, 8 dan 12) yang disematkan di p3.pdf sekarang. p3.pdf terdiri dari 3 halaman:

pdfinfo p3.pdf | grep Pages:

 Pages:          3

Optimalkan PDF dengan mengganti gambar duplikat dengan referensi

Sekarang kita dapat menerapkan pengoptimalan yang disebutkan di atas dengan bantuan Ghostscript

 gs -o p3-optim.pdf -sDEVICE=pdfwrite -dDetectDuplicateImages=true p3.pdf

Memeriksa:

 pdfimages -list p3-optim.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%

Masih ada satu gambar yang dicantumkan per halaman -- tetapi ID objek PDF sekarang selalu sama:10.

 ls -ltrh p1.pdf p3.pdf p3-optim.pdf

   [email protected] 1 kp  staff    20K Jan  6 19:36 p1.pdf
   -rw-r--r--  1 kp  staff    60K Jan  6 19:37 p3.pdf
   -rw-r--r--  1 kp  staff    16K Jan  6 19:40 p3-optim.pdf

Seperti yang Anda lihat, rangkaian "bodoh" yang dibuat dengan pdftk meningkatkan ukuran file asli menjadi tiga kali lipat dari aslinya. Optimalisasi oleh Ghostscript menurunkannya dengan jumlah yang cukup besar.

Versi terbaru Ghostscript bahkan mungkin menerapkan -dDetectDuplicateImages secara default. (AFAIR, v9.02, yang pertama kali memperkenalkannya, tidak menggunakannya secara default.)


Linux
  1. Bagaimana Cara Grep Dalam File Pdf?

  2. File Cat Dengan Direktori?

  3. Ganti Nama File Di Direktori?

  1. Urutkan File Dalam Folder Tertentu Dengan Ranger?

  2. Cadangkan file Anda dengan rsync

  3. Bekerja dengan file ZIP di Linux

  1. Kompres file PDF di Linux dengan Densify

  2. Gabungkan file pdf dengan pengurutan numerik

  3. Mengubah PDF menjadi hitam putih dengan ghostscript