Bagaimana saya bisa benar-benar meratakan PDF di Mac OS pada baris perintah?

16

Saya menggunakan Mac OS X Snow Leopard. Saya memiliki PDF dengan bidang formulir, anotasi, dan prangko. Saya ingin membekukan (atau "meratakan") PDF itu sehingga bidang formulir tidak dapat diubah dan anotasi / prangko tidak lagi dapat diedit. Karena saya sebenarnya memiliki banyak PDF ini, saya ingin melakukan ini secara otomatis pada baris perintah.

Beberapa hal yang saya coba / pertimbangkan, dengan tingkat keberhasilannya:

  • Buka di Pratinjau dan Cetak ke File. Ini menciptakan PDF yang benar-benar rata tanpa mengubah ukuran file. Satu-satunya cara untuk mengotomatiskan tampaknya adalah dengan menulis AppleScript berbasis UI kludgy , yang saya coba hindari.
  • Buka di Acrobat Pro dan gunakan fungsi JavaScript untuk meratakan . Sekali lagi, tidak yakin bagaimana mengotomatisasi ini di baris perintah.
  • Gunakan pdftkdengan flattenopsi. Tapi ini hanya meratakan bidang formulir, bukan perangko dan anotasi lainnya.
  • Gunakan cupsfilteryang dapat membuat PDF dari banyak format file. Seperti pdftkini hanya rata bidang formulir.
  • Gunakan cups-pdfuntuk menghubungkan ke server cetak Mac dan menyimpan file PDF, bukan cetak. Saya menggunakan versi macports . File yang dihasilkan rata tetapi besar. Saya mencoba ini pada file 8MB; PDF yang diratakan adalah 358MB! Mungkin ini dapat dikombinasikan dengan panggilan ghostscript seperti di Ubuntu Tip: Bagaimana cara mengurangi ukuran file PDF dari baris perintah .

Saran lain akan dihargai.

Matthew Leingang
sumber
1
Automator.app memiliki beberapa opsi pemrosesan pdf bawaan. Mungkin salah satunya dapat membantu secara langsung atau dikombinasikan dengan salah satu tindakan di atas.
Kassym Dorsel
Bisakah Anda memberikan dokumen sampel PDF yang berisi elemen-elemen ini?
Daniel Beck
Aku pikir begitu. Saat ini semua sampel saya adalah kuis siswa jadi saya harus mengejek sesuatu.
Matthew Leingang

Jawaban:

11

Coba gunakan pdf2psdan ps2pdfberturut-turut. Agak rumit tapi membantu saya mengurangi dokumen 30MB saya menjadi 17MB. Tidak sebanyak yang saya inginkan tetapi masih lebih baik. Saya mendapat ide ini dari seorang teman yang menggunakan metode ini untuk menyingkirkan izin kata sandi pada pdf.

pdf2ps your_pdf_file.pdf your_pdf_file.ps
ps2pdf your_pdf_file.ps your_pdf_file_from_ps.pdf

Semoga itu bisa membantu!

Olga Botvinnik
sumber
3
GhostScript FTW! Aku mendapatkannya ke satu-kapal dengan menggunakan pipa: pdf2ps file.pdf - | ps2pdf - file_flat.pdf. File beralih dari 300K ke 500K yang merupakan persentase kenaikan besar tetapi tidak seperti peningkatan 4400% cups-pdfmetode yang dihasilkan.
Matthew Leingang
Sebenarnya, saya lebih beruntung pdf2ps -q -sOutputFile=- file.pdf | ps2pdf - file_flat.pdf.
Matthew Leingang
4
Mencatat bahwa pada Mac Anda dapat menginstal Ghostscript untuk membuat perintah di atas tersedia melalui homebrew dengan brew install ghostscript.
Nick
5

Jadi ini yang saya gunakan belakangan ini. Saya pikir secara fungsional itu melakukan hal yang sama pdf2ps file.pdf - | ps2pdf - file_flat.pdf, tetapi tampaknya bekerja lebih baik untuk saya.

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=<newfile> <oldfile>
Matthew Leingang
sumber
Solusi ps2pdf gagal untuk saya. Ini berhasil, dengan rupanya mengindeks ulang font dalam PDF.
inkaphink
Tidak satu pun dari perintah ini yang rata. Anda dapat menyalin lapisan yang mendasarinya menggunakan Pratinjau dan konten asli akan ada.
Alain O'Dea
1

Ini mungkin sub-opsional, tetapi apakah Anda mempertimbangkan chaining cups-pdf dengan pdftk atau cupsfilter? Seperti yang Anda sebutkan, cups-pdf akan menghasilkan file pdf datar dan kemudian meneruskannya melalui pdftk atau cupsfilter untuk menurunkannya ke ukuran yang dapat diterima?

Sebagai alternatif, lihat /System/Library/Printers/Libraries/convert Anda harus dapat melakukan sesuatu seperti

/System/Library/Printers/Libraries/convert -f input_file.pdf -o output_file.pdf -j "application/pdf"
Mxx
sumber
Mac saya tidak punya /System/Library/Printers/Libraries/convert. Saya mencoba cupsfilter. Saat mengkonversi dari PDF ke PDF, tidak ada perubahan yang dilakukan pada file tersebut. Ketika mengkonversi dari PDF ke PS dan kemudian ke PDF penjelasannya hilang.
Matthew Leingang
1

PERINGATAN: gs dan pdf2ps | ps2pdf JANGAN Ratakan PDF!

Menggunakan gs atau pdf2ps diikuti oleh ps2pdf akan menghasilkan PDF multi-layer dengan konten di bawah anotasi hadir dalam bentuk asli . Anda dapat memverifikasi cacat ini di Pratinjau dengan menggunakan Pilih Semua, lalu Salin, lalu Rekatkan ke jendela TextEdit (dalam mode teks kaya). Anda akan melihat teks atau grafik di bawah penjelasan redaksi misalnya. Ini jelas sangat buruk jika Anda secara hukum membutuhkan konten tersebut untuk hilang dari output.

Solusi yang Berfungsi

ImageMagick dapat menghasilkan kualitas PDF yang bisa dikonfigurasi, multi-halaman, satu-lapis dengan raster dari setiap halaman menggunakan perintah berikut:

convert -density 150 document_original.pdf document_flat.pdf

Perintah ini merasterisasi document_original.pdf, membuat gambar berbasis pixel dari setiap halaman, pada 150 DPI, dan menampilkan hasilnya sebagai document_flat.pdf.

Catatan tentang Kualitas Gambar

Karena rasterisasi , ini menghasilkan PDF yang tidak dapat diskalakan (zoom dan Anda akan melihat teks atau gambar vektor asli menjadi ter-pixelisasi). Ini kemungkinan akan memiliki ukuran file yang lebih besar kecuali jika aslinya memiliki konten vektor yang sangat kompleks seperti sejuta plot plot.

Dengan mengubah kepadatan , Anda dapat memperdagangkan ukuran file yang lebih besar untuk output resolusi yang lebih tinggi.

Semua teks akan dikonversi ke piksel mentah di setiap gambar halaman. Diagram teks dan vektor paling menderita, jadi bereksperimenlah dengan DPI sampai Anda mendapatkan file output yang dapat digunakan.

Alain O'Dea
sumber
1
Terima kasih telah berkontribusi atas jawaban ini. 5 tahun yang lalu solusi yang saya tulis berhasil untuk saya. Tetapi saya akan memberikan jawaban Anda coba lain kali saya harus melakukan ini (sebenarnya segera).
Matthew Leingang
Itu masuk akal. Saya membayangkan perilaku Ghostscript berubah sehubungan dengan meratakan anotasi. Saya mencoba menambahkan -PreserveAnnots = false dan itu masih tidak berhasil. Di bawah tenda konversi menggunakan Ghostscript untuk pemrosesan PDF. Saya ingin sesuatu yang melakukan apa yang Acrobat lakukan: ia membuat anotasi, menghapus konten di belakangnya, dan memelihara gambar vektor yang tidak tertutup. Bagian Dokumen Cloud dengan Acrobat baru benar-benar membuat saya gugup menggunakannya untuk data sensitif.
Alain O'Dea
0

Applescript mungkin adalah cara terbaik / tercepat ke baris perintah. Setelah berfungsi, Anda dapat menyimpannya sebagai aplikasi dan membuat alias di shell perintah untuk menjalankannya. Setelah itu, Anda cukup mengetik alias Anda di baris perintah.

JRobert
sumber
Tapi apa cara termudah untuk meratakan PDF dalam AppleScript? Saya lebih suka tidak skrip UI untuk meniru pencetakan ke file. Itu tampak muram dan lambat.
Matthew Leingang