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:
pdftk title.pdf content.pdf cat output book.pdf
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, karena pdftk
tidak dengan cara apa pun menafsirkan aliran data PDF, itu hanya memastikan bahwa nomor objek internal di-reshuffle sesuai kebutuhan dan muncul dalam xref
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:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
title.pdf \
content.pdf
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:
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
Opsi baris perintah terkait gambar lainnya untuk dipertimbangkan termasuk:
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
Jadi commandline Ghostscript lengkap yang bisa membuat Anda bahagia harus membaca:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
title.pdf \
content.pdf
Anda juga bisa memberi tahu Ghostscript untuk tidak mengkompres gambar sama sekali dalam output PDF, dengan menggunakan perintah ini:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dEncodeColorImages=false \
-dEncodeGrayImages=false \
-dEncodeMonoImages=false \
title.pdf \
content.pdf
.
[*]:
Jika Anda tertarik untuk mengetahui daftar lengkap pengaturan default yang digunakan perangkat pdfwrite Ghostscript , jalankan perintah berikut. Ini mengembalikan Anda daftar lengkap :
gs \
-sDEVICE=pdfwrite \
-o /dev/null \
-c "currentpagedevice { exch ==only ( ) print == } forall"
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 ...