Apakah ada cara untuk meratakan gambar .pdf dari baris perintah?

19

Di GIMP, saya dapat mengimpor .pdf, dan menggunakan GUI untuk meratakannya (jika dibuat dengan banyak lapisan) dengan memilih "Ratakan Gambar" di menu tarik-turun "Gambar". Saya kemudian dapat mengekspor .pdf dengan nama file baru.

Saya ingin mengotomatiskan ini. Apakah ada cara untuk melakukannya melalui terminal?

generic_user
sumber
1
instal imagemagick dan baca man mogrify-im6, montage-im6, display-im6, stream-im6, identifikasikan-im6, import-im6, conjure-im6, composite-im6, convert-im6, convert-im6, animate-im6, dan bandingkan-im6.
PersianGulf

Jawaban:

25

Saya menemukan 2 metode ini melalui Google, di utas ini berjudul: Re: Meratakan File PDF di UNIX Command Line .

Metode # 1 - menggunakan konversi Imagemagick:
$ convert orig.pdf flattened.pdf 

CATATAN: Kualitas dilaporkan demikian dengan pendekatan ini.

Metode # 2 - Menggunakan pdf2ps -> ps2pdf:
$ pdf2ps orig.pdf - | ps2pdf - flattened.pdf 

CATATAN: Metode ini dilaporkan untuk mempertahankan kualitas gambar.

slm
sumber
1
Kualitas yang lebih baik daripada GIMP pada detik - terima kasih!
generic_user
@ ACD - itu bagus untuk diketahui. Senang itu bisa menyelesaikan Q.
slm
2
Metode 1 menghasilkan gambar yang sangat kabur, sementara metode 2 bekerja dengan sempurna.
Severyn Kozak
1
Sayangnya, Metode # 2 tidak meraster gambar, jadi jika Anda mencoba untuk memblokir bagian sensitif, pengguna masih bisa membuka dokumen dan menghapus lapisan (dengan sesuatu seperti Inkscape). Anda bisa, bagaimanapun, memodifikasi resolusi Metode # 1: $ convert -density 150 {original,flattened}.pdf Jika Anda perlu untuk melestarikan ruang disk, Anda dapat menggunakan -type Grayscaleatau -monochromeatau hal-hal semacam itu.
eacousineau
1
Kedua metode akan meraster pdf, meskipun metode # 2 melakukannya pada resolusi yang jauh lebih tinggi. Jadi tidak satupun dari metode ini yang memuaskan.
Semut
18

Ghostscript (gs) bekerja lebih baik daripada pdf2psdan convertbagi saya. Kualitas hampir tidak terdegradasi dan ukuran file kecil.

gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-sColorConversionStrategy=/LeaveColorUnchanged  \
-dAutoFilterColorImages=true \
-dAutoFilterGrayImages=true \
-dDownsampleMonoImages=true \
-dDownsampleGrayImages=true \
-dDownsampleColorImages=true \
-sOutputFile=document_flat.pdf document_original.pdf

Ditemukan di sini: http://zeroset.mnim.org/2015/01/07/flatten-pdfs-with-ghostscript/

Stan Bondi
sumber
Metode ini berfungsi dengan baik, pdf tidak dirasterisasi dan teks dilestarikan sebagai teks
Semut
2
Saya mencoba menggunakan ini untuk menghapus lapisan transparansi melalui perataan, tetapi tidak berhasil bagi saya.
mikemtnbikes
Itu mengubah font untuk saya tetapi resolusi lebih baik daripada metode lain yang diusulkan.
ste
1

Meskipun konversi akan menjaga ukuran file yang sama, saya merasa lambat.

Metode ps2pdf pdf2ps lebih cepat tapi saya perhatikan bagi saya itu meningkatkan ukuran file.

pdftk bagus karena tidak hanya cepat tetapi juga mempertahankan ukuran file yang serupa.

Ini yang saya gunakan untuk meratakan direktori secara massal.

    function pdfflatten () {
        pdftk "$1" output "$2" flatten
    }
    export pdfflatten
    alias pdfflattenDIR='mkdir flattenedPDFs; for i in `seq $(ls *.pdf | wc -l)`; do a=`ls *.pdf | head -$i | tail -1`; pdfflatten "$a" flattenedPDFs/"$a"; done'
Jgar
sumber
pdftk flatten tidak mengubah gambar dalam PDF. Dari dokumen itu "menggabungkan kolom formulir input interaktif (dan data mereka) dengan halaman PDF"
Aidan Kane
1
Agar jelas, pendekatan ini tidak meratakan lapisan transparan (seperti yang ditunjukkan di atas).
mikemtnbikes