Menggunakan Ghostscript untuk mengonversi multi-halaman PDF menjadi JPG tunggal?

15

Saya tahu Ghostscript dapat mengonversi PDF ke JPG, dan dalam hal PDF multi-halaman, dapat merobek setiap halaman ke masing-masing JPG. Tetapi mungkinkah untuk merobeknya menjadi satu JPG, sehingga halaman-halamannya ditempelkan di bawah satu sama lain, misalnya bagian atas dari JPG adalah halaman 1, bagian bawah adalah halaman 2? Atau apakah saya harus menggunakan program lain (dan dapatkah ImageMagick melakukan ini?) Untuk menggabungkan halaman JPG menjadi satu gambar?

Andrew
sumber

Jawaban:

17

Ya, Anda harus mengubah setiap halaman PDF menjadi file JPG tunggal (Ghostscript dapat melakukannya).

Kemudian jahit bersama file JPG yang dihasilkan menggunakan program lain ( ImageMagick atau GraphicsMagic dapat melakukannya dengan menggunakan montagesub-perintah mereka).

Saya tidak mengetahui adanya perangkat lunak yang dapat melakukannya dalam sekali jalan.

Konversi PDF-ke-JPG (dengan Ghostscript): Anda ingin memastikan bahwa Anda mendapatkan hasil terbaik. Jadi, pastikan Anda mengubah opsi commandline sehingga mereka bekerja untuk Anda. Saya akan mulai dengan ini:

gswin32c.exe ^
    -dBATCH ^
    -dNOPAUSE ^
    -dSAFER ^
    -sDEVICE=jpeg ^
    -dJPEGQ=95 ^
    -r600x600 ^
    -sOutputFile=c:/path/to/jpeg-dir/pdffile-%03d.jpeg ^
    c:/path/to/pdffile.pdf

Ini akan membuat JPG yang disebut pdffile-001.jpeg , pdffile-002.jpg dll. Parameter * -dJPEGQ = 95 "menetapkan" Kualitas JPEG "menjadi 95%. Menggunakan resolusi" 600x600 dpi ". Anda mungkin perlu tambahan mengontrol ukuran halaman dari JPG yang dihasilkan jika default Ghostscript Anda tidak sesuai dengan kebutuhan Anda:

gswin32c.exe ^
    -dBATCH ^
    -dNOPAUSE ^
    -dSAFER ^
    -sDEVICE=jpeg ^
    -dJPEGQ=95 ^
    -r600x600 ^
    -dPDFFitPage ^
    -dFIXEDMEDIA ^
    -dDEVICEWIDTHPOINTS=800 ^
    -dDEVICEHEIGHTPOINTS=600 ^
    -sOutputFile=c:/path/to/jpeg-dir/pdffile-%03d.jpeg ^
    c:/path/to/pdffile.pdf

atau

gswin32c.exe ^
    -dBATCH ^
    -dNOPAUSE ^
    -dSAFER ^
    -sDEVICE=jpeg ^
    -dJPEGQ=95 ^
    -r600x600 ^
    -dPDFFitPage ^
    -dFIXEDMEDIA ^
    -sDEFAULTPAPERSIZE=a4 ^
    -sOutputFile=c:/path/to/jpeg-dir/pdffile-%03d.jpeg ^
    c:/path/to/pdffile.pdf

multiple-to-tunggal-JPG-jahitan dengan montage(ImageMagick atau GraphicsMagick): Themontageperintah (yang digunakan dalam contoh ini adalah ImageMagick) memungkinkan Anda untuk mengontrol pola ubin. Jika Anda menggunakan misalnya-tile 4x3Anda akan mendapatkan tata letak pemaksaan ini:

1  2  3  4    
5  6  7  8    
9 10 11 12    

Anda dapat menggunakan perintah ini untuk menjahit 12 JPG individual menjadi satu:

montage ^
    -border 0  ^
    -tile 4x3  ^
    c:/path/to/jpeg-dir/pdffile-*.jpeg  ^
    c:/path/to/final.jpg

Tentu saja, montagememiliki banyak lusin parameter tambahan yang memungkinkan Anda untuk menentukan latar belakang, jarak, offset, dekorasi, label, rotasi, pemotongan, keterangan dll. Untuk input dan JPG yang dihasilkan.


EDIT: (Saya ingin memberi petunjuk ini pada jawaban asli saya, tetapi lupa.) Secaramontagedefault akan menggunakan ukuran ubin 120x120 piksel. Jika Anda ingin mempertahankan ukuran halaman asli untuk setiap ubin, Anda harus menambahkan-geometryke baris perintah. Dengan anggapan Anda memiliki halaman A4 (= 595x852 pt) dalam PDF Anda, dan Anda ingin menyimpannya, tetapi juga menambahkan spasi 11pt ke horizontal dan 22 pt ke arah vertikal ubin (ditambah 4pt garis perbatasan / bingkai abu-abu yang kuat) di sekitar setiap ubin), lakukan ini:

montage ^
    -border 4 ^
    -tile 4x3 ^
    -geometry 595x842+11+22 ^
    c:/path/to/jpeg-dir/pdffile-*.jpeg ^
    c:/path/to/final.jpg

EDIT 2: (Masih ketinggalan petunjuk penting lainnya.) Jika Anda tidak ingin kehilangan kualitas gambar yang baik selama proses penjahitan / montase, yang konversi PDF-to-JPG Anda buat, maka tambahkan juga-quality 100parameter ke commandline Anda seperti ini :

montage ^
    -border 4 ^
    -tile 4x3 ^
    -geometry 595x842+11+22 ^
    -quality 100 ^
    c:/path/to/jpeg-dir/pdffile-*.jpeg ^
    c:/path/to/final.jpg
Kurt Pfeifle
sumber
Terima kasih atas jawaban Anda. Saya tidak melihat param geometri di ImageMagick 6.9.9. Juga, kualitas gambar dari gambar gabungan masih jelek, saya benar-benar tidak bisa membaca sepatah kata pun dari itu.
Geek
2

Karena ImageMagick memiliki dukungan untuk GhostScript bawaan, Anda dapat melakukan semuanya sekaligus:

montage -tile 5 thispdfis25pages.pdf tiledoverview.jpg

yang akan mengambil setiap halaman dan membuat satu jpeg panjang dari ujung ke ujung.

erjiang
sumber
1
Tapi ini TIDAK akan memberi Anda JPG kualitas tinggi, karena akan menggunakan Ghostscript dengan pengaturan default (dan ini sangat shi..y untuk output JPG). Melakukannya dalam 2 langkah (dan memeriksa halaman JPG Anda terlebih dahulu) memberi Anda kontrol yang optimal, dan itu juga memberi Anda hasil JPG yang agak bagus).
Kurt Pfeifle
Anda dapat mengubah pengaturan Ghostscript dengan menggunakan pengaturan -Density ImageMagick untuk PDF dan mendapatkan hasil yang sama baiknya. Jangan ketuk IM jika Anda tidak mengetahui cara menggunakan opsinya.
erjiang
1
k .: Hei, aku tidak mengetuk ImageMagick. Dan saya tahu cara menggunakan opsinya, bahkan dengan menerapkan profil warna ICC ... Tapi Anda tidak bisa meneruskan semua opsi Ghostscript ke montase. Komentar saya merujuk pada perintah yang Anda sarankan, yang tidak menyebutkan -density.
Kurt Pfeifle
Kebetulan, saya membaca di tempat lain di SO bahwa ImageMagick internal mengkonversi dari PDF ke PS dan kemudian PS ke PNG ketika Anda memintanya dengan cara ini, jadi itu alasan lain untuk tidak melakukannya dengan cara ini (dua konversi => kualitas lebih rendah dan lebih lambat).
Ibrahim