Saya memiliki PDF yang sudah dikompresi dan agak artifak-y gambar, dan saya menggunakan Ghostscript untuk menambahkan halaman judul ke PDF itu.
Namun, saya tidak dapat menemukan cara untuk memberitahu GS untuk hanya menggunakan gambar yang ada apa adanya tanpa memproses ulang mereka, dan sekarang saya merasa seolah-olah itu ada hubungannya dengan cara kerja GS, yaitu Anda tidak dapat mengkompilasi ulang / menautkan PDF tanpa memproses ulang gambarnya .. Apakah itu benar?
Saya dapat meningkatkan pengaturan DPI di GS, tetapi akan berubah dari 5MB menjadi 60MB sementara masih terlihat lebih buruk.
Apakah ada alternatif yang lebih baik untuk GS yang akan melakukan apa yang saya butuhkan (lebih disukai yang akan dikompilasi pada OS X)?
pdf
ghostscript
pdftk
Mahmoud Al-Qudsi
sumber
sumber
Jawaban:
Jika Anda hanya ingin menggabungkan dua file PDF tanpa memproses ulang kontennya,
pdftk
itu untuk Anda. (Pada Mac OS X ini harus tersedia melalui MacPorts atau Fink, untuk Linux, ada paket asli untuk semua distribusi utama; untuk Windows, lihat di sini. ) Coba ini:Ini akan mengawali title.pdf ke content.pdf dan menulis hasilnya ke book.pdf .
pdftk
adalah "bodoh", tetapi cara yang sangat cepat untuk menggabungkan dua (atau lebih) file PDF. "Bodoh" sejauh ini, karenapdftk
tidak dengan cara apa pun menafsirkan aliran data PDF, itu hanya memastikan bahwa nomor objek internal di-reshuffle sesuai kebutuhan dan muncul dalamxref
struktur PDF (yang pada dasarnya adalah semacam ToC PDF untuk benda).Ghostscript:
Jika Anda ingin menggunakan Ghostscript, perintah dasar untuk menggabungkan dua file yang sama adalah:
Namun, seperti yang Anda alami, baris perintah sederhana ini dapat mengacaukan kualitas gambar Anda. Alasannya adalah bahwa Ghostscript bukan 'dump' ketika memproses PDF: itu sepenuhnya menafsirkannya ketika membaca, dan membuat file yang sama sekali baru saat menuliskan hasilnya. Untuk membuat hasilnya, secara otomatis akan menggunakan pengaturan default untuk banyak detail dalam pemrosesan keseluruhan. Default ini akan berlaku untuk semua kasus di mana pemanggilannya tidak menginstruksikan Ghostscript sebaliknya.
Jadi metode Ghostscript untuk membuat book.pdf baru jauh lebih "cerdas" (tetapi juga jauh lebih lambat) daripada
pdftk
metode. (Ini juga alasan mengapa Ghostscript dalam banyak kasus mampu --dalam batas - "memperbaiki" file PDF yang rusak, atau untuk menanamkan font ke dalam output PDF yang tidak tertanam dalam input PDF, atau untuk menghapus duplikat gambar, menggantikan mereka hanya dengan referensi, dll. - dan secara keseluruhan dibuat file yang lebih kecil, lebih baik dioptimalkan dari PDF masukan yang membengkak ...)Solusinya adalah tidak membiarkan Ghostscript menggunakan defaultnya: dengan menambahkan lebih banyak parameter khusus ke baris perintah.
Apa artinya "Ghostscript 'menginterpretasikan input PDF-nya" ?
Semua file dan isinya (objek, aliran, font, gambar, ...) dibaca, diperiksa, dan disimpan dalam representasi internal sendiri, sebelum memuntahkan PDF yang dihasilkan dengan objek PDF-nya lagi. Namun, ketika 'meludahkan', Ghostscript akan menerapkan semua pengaturan default internal untuk ratusan parameter [*] yang tersedia.
Sayangnya, ini menyebabkan Anda "memproses ulang" gambar sesuai dengan pengaturan default ini - yang hanya dapat dihindari atau diganti dengan menambahkan parameter baris perintah Anda sendiri (yang diinginkan).
Masalah gambar Anda dapat disebabkan oleh kebutuhan Ghostscript (karena masalah lisensi) untuk menyandikan ulang gambar JPEG2000 ke penyandian JPEG. Jika Anda ingin menghindari ini, tambahkan yang berikut ke baris perintah Anda:
Opsi baris perintah terkait gambar lainnya untuk dipertimbangkan termasuk:
Jadi commandline Ghostscript lengkap yang bisa membuat Anda bahagia harus membaca:
Anda juga bisa memberi tahu Ghostscript untuk tidak mengkompres gambar sama sekali dalam output PDF, dengan menggunakan perintah ini:
.
[*]:
Jika Anda tertarik untuk mengetahui daftar lengkap pengaturan default yang digunakan perangkat pdfwrite Ghostscript , jalankan perintah berikut. Ini mengembalikan Anda daftar lengkap :
Untuk penjelasan tentang apa sebenarnya arti semua parameter ini, Anda harus membaca dalam dokumentasi Adobe tentang "Parameter Pengurai" . Ghostscript berusaha sangat keras untuk meniru semua ini ...
sumber
dEncodeColorImages
,dEncodeGrayImages
,dEncodeMonoImages
penyebabnya file output untuk menjadi jauh lebih besar. Dengan menghapusnya, ukuran file berubah dari 22MB menjadi 3.1MB dan kualitas gambar tampaknya sama persis dengan menggunakan flag-flag ini. Semua yang unik bendera dengan saya menggunakan adalah:dColorConversionStrategy=/LeaveColorUnchanged
,dDownsampleMonoImages=false
,dDownsampleGrayImages=false
,dDownsampleColorImages=false
,dAutoFilterColorImages=false
,dAutoFilterGrayImages=false
,dColorImageFilter=/FlateEncode
,dGrayImageFilter=/FlateEncode
-dColorImageFilter
? Saya hanya dapat menemukanFlateEncode
danDCTEncode
. DCT tampaknya melakukan JPEG (mengapa mereka mengenkripsi itu?). Saya pikir FLATE adalah pilihan yang sudah ketinggalan zaman untuk gambar sekarang karena paten Bell Labs di LZW tidak lagi menjadi masalah? Namun setelah menghabiskan waktu mencari, saya tidak dapat menemukan cara menggunakan PNG (atau apa pun) ... Gambar asli saya adalah PNG dan saya ingin mereka tetap tidak berubah. Saya mencoba opsi -c, tapi itu memberi saya-c can only be used in a built with POSTSCRIPT included.
...