Cara menyaring / meraster PDF di Linux

13

Kami memiliki printer di kantor kami yang mencetak file PDF dari stik USB. Ini mencetak sebagian besar file, tetapi memiliki beberapa masalah, terutama yang dihasilkan dengan Lateks. Beberapa PDF itu hanya menolak untuk mencetak, beberapa PDF itu dicetak dengan font jenis kurir, dan beberapa itu mencetak dengan baik kecuali untuk persamaan.

Saya mencari cara untuk "menyaring" PDF ke dalam format mati-yakin untuk dicetak. Baik dengan menyederhanakan / menormalkan PDF ke titik bahwa setiap penyaji akan merendernya dengan benar, atau hanya dengan membuat setiap halaman gambar raster 600dpi dalam PDF. (Saya dapat membagi PDF menjadi gambar raster individual dan menggabungkannya secara manual, tetapi saya ingin sesuatu yang dapat dituliskan skrip.)

Ukuran file output tidak masalah, selama pasti akan dicetak, memiliki ukuran kertas A4 (atau aslinya) dan resolusi 300 ~ 600dpi.

Sampo
sumber
Mungkin pdf2ps dapat membantu jika printer mendukung postscript.
frlan
Seharusnya printer PostScript, tetapi dukungan itu bahkan lebih buruk daripada PDF (dan tidak akan mencetak PS dari stik USB).
Sampo

Jawaban:

22

Setelah gagal mencoba beberapa opsi untuk merender font sebagai garis besar (termasuk pertanyaan ini dan pstoedit), saya menemukan cara untuk dengan mudah mengkonversi PDF ke bentuk raster menggunakan ImageMagick:

convert -density 600 +antialias input.pdf output.pdf

Ini menghasilkan PDF yang dibuat pada 600 dpi, dengan antialias dimatikan (tidak perlu pada resolusi itu).

File output sangat besar (~ 30 MB untuk dokumen 8 halaman) dan sangat lambat untuk dicetak, tetapi harus bekerja selama printer memiliki cukup memori untuk membuat konten.

Sampo
sumber
1
Iya! Saya menggunakan ini untuk meratakan lapisan dalam PDF saya untuk sukses besar. + antialias tidak diperlukan karena kami hanya memiliki gambar (tidak ada bedanya) dan saya menurunkan resolusinya menjadi 150 karena tampaknya cukup baik untuk pengarsipan tanpa menghabiskan banyak ruang. Terima kasih!
mlissner
2
Perhatikan bahwa converttidak menyimpan isi formulir yang mungkin telah Anda isi. (Saya ingin meraster file PDF untuk memastikan bahwa konten form terlihat sama di mana-mana, khususnya bahwa mereka akan ditampilkan oleh setiap penampil PDF di tempat pertama.) Untuk menjaga konten form, gunakan evince(atau apa pun aplikasi yang Anda gunakan untuk mengisi formulir) untuk mencetak dokumen "ke file" - ini adalah PDF lain di mana isi formulir sebenarnya telah menjadi bagian dari teks biasa. Maka Anda masih dapat merasterisasi PDF baru ini, tergantung pada kebutuhan Anda.
balu
Perhatikan bahwa ini mengaktifkan antialiasing pada ( +antialias) daripada mematikannya ( -antialias).
xiii1408
Tidak, +antialiasnonaktifkan antialiasing: imagemagick.org/script/command-line-options.php?#antialias
Sampo
1
Saya perlu mengubah imagemagick ( stackoverflow.com/questions/42928765/… ) untuk membuat pekerjaan ini.
SteveSong
1

Menggunakan imagemagick, menurut pengalaman saya, tidak stabil dengan resolusi tinggi dan / atau file besar. Banyak printer dapat melakukan 1.200 dpi ke atas, sehingga file raster harus memiliki resolusi yang sama. Solusi yang lebih baik adalah dengan menggunakan pdf2djvu yang lebih cepat, lebih kuat, dan bahkan membuat file dengan ukuran yang sering menyaingi PDF asli pada 1200 atau 2400 dpi. File-file ini dapat dilihat dan dicetak menggunakan okular atau evince.

Contoh:

pdf2djvu -d 2400 file.pdf > rastered.djvu
mjo
sumber
1

Saya pikir cara yang saya sukai saat ini adalah:

  1. Gunakan pdftoppm untuk mengonversi file PDF menjadi serangkaian gambar.

    $ pdftoppm source.pdf output -png

  2. Gunakan img2pdf untuk membuat file pdf dari gambar-gambar itu.

    $ img2pdf * .png -o output.pdf

Berita baiknya adalah Anda dapat membuat skrip bash untuk mengotomatiskan seluruh proses untuk Anda.

Berikut ini adalah skrip bash yang akan menyaring semua file pdf dalam direktori dan melestarikan dokumen asli di direktori "asli" baru.

#!/bin/bash

mkdir "originals";
for filename in ./*.pdf; do
    pdftoppm "$filename" output -png
    mv "$filename" ./originals
    img2pdf *.png "-o" "$filename"
    rm *.png
done

Kredit: jawaban img2pdf & jawaban pdftoppm & bantuan skrip bash: 1 & 2

(Catatan) Anda dapat menginstal img2pdf menggunakan:

$ sudo untuk menginstal img2pdf

Michael
sumber
-1

Alternatif lain adalah mengonversi ke gambar melalui sesuatu seperti

pdfimages

Dari halaman manual, "Pdfimages menyimpan gambar dari file Portable Document Format (PDF) sebagai Portable Pixmap (PPM), Portable Bitmap (PBM), atau file JPEG. Pdfimages membaca file PDF file PDF, memindai satu atau lebih halaman file, dan memindai menulis satu file PPM, PBM, atau JPEG untuk setiap gambar, image-root-nnn.xxx, di mana nnn adalah nomor gambar dan xxx adalah tipe gambar (.ppm, .pbm, .jpg). "

Kemudian gunakan pdftk untuk mengkonversi kembali ke PDF https://www.pdflabs.com/docs/pdftk-cli-examples/

Akhirnya, cetak file ini. Jelas, pertanyaan kuncinya adalah bagaimana membuat skrip ini.

Anda dapat mengotomatisasi ini melalui halaman web sederhana semacam untuk pengguna. Akhirnya, mereka mencetak file yang dikonversi dan Anda harus memiliki kinerja yang lebih tinggi dan hasil kerja?

dtbnguyen
sumber
3
pdfimages mengekstrak gambar raster yang disematkan dari file PDF, tidak merasterisasi teks atau gambar vektor.
Sampo