Bagaimana cara menentukan DPI gambar dalam file PDF secara terprogram?

13

Saya memiliki beberapa file PDF yang ingin saya pisahkan menjadi file TIFF convert(untuk OCR via tesseract). Sejauh ini bekerja dengan baik - kecuali untuk mengotomatiskan seluruh proses, saya perlu mengatur DPI dari convertoutput. Saat ini, saya menggunakan perintah seperti ini:

convert -density 300 myFile.pdf -depth 8 -background white output-%04d.tiff

... yang menghasilkan file PDF pada 300 DPI. Namun, beberapa file PDF memiliki DPI lebih rendah (mis. 150 DPI) yang berarti bahwa saya tidak ingin menampilkannya pada 300 DPI melalui convert- ini membuat file TIFF terlalu besar tanpa informasi tambahan.

Saya tahu bahwa ada cara untuk memeriksa DPI gambar dalam file PDF dengan membuka Adobe Acrobat dan bermain-main di alat "preflight". Namun, apakah ada cara untuk menentukan melalui baris perintah DPI file PDF tertentu?

Jason
sumber

Jawaban:

9

Jawaban utama

Karena saya tertarik pada jenis pekerjaan yang sama (walaupun tidak perlu untuk OCR file PDF, tetapi untuk mengubahnya menjadi DjVu dan kemudian OCR mereka), saya menemukan pertanyaan ini dan tanggapannya kurang (karena saya perlu menebak DPI dari gambar dengan jumlah piksel dan kemudian gunakan ukuran sebagai keluaran oleh pdfinfoatau trik lain --- belum lagi bahwa gambar di dalam PDF mungkin memiliki kepadatan yang berbeda, dll.).

Setelah banyak penelitian lebih lanjut, saya menemukan bahwa Anda dapat menggunakan pdfimages(dari paket poppler-utils ) seperti berikut:

$ pdfimages -list deptest.pdf
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image     100   100  gray    1   1  image  no         9  0    53    53  169B  14%
   2     1 image     100   100  gray    1   1  ccitt  no   [inline]      53    53  698B  56%

Perhatikan x-ppidan y-ppipada daftar di atas. Ini juga mencantumkan format penyimpanan gambar dalam PDF, yang keren (terkadang JBIG2, terkadang JPEG2000 dll.)

Catatan: File yang deptest.pdfdigunakan di atas tersedia dari pdfsizeoptrepositori .

Tindakan nyata

Setelah itu, Anda cukup mengekstraksi gambarnya pdfimagessendiri atau menggunakan pdftoppm(juga dari poppler-utils) untuk merender seluruh halaman dalam banyak format yang mungkin Anda sukai (mis. Tiff, untuk pemindaian tesseract).

Anda dapat menggunakan sesuatu seperti berikut ini (dengan asumsi Anda telah membuat direktori bernama imgstempat Anda meletakkan gambar Anda):

pdfimages -png Faraway-PRA.pdf imgs/prefix

File akan dibuat di dalam direktori imgsdengan nama yang dimulai dengan prefix, seperti pada:

$ ls 
prefix-000.png  prefix-047.png  prefix-094.png  prefix-141.png
prefix-001.png  prefix-048.png  prefix-095.png  prefix-142.png
prefix-002.png  prefix-049.png  prefix-096.png  prefix-143.png
prefix-003.png  prefix-050.png  prefix-097.png  prefix-144.png
(...)

Anda dapat, kemudian, melakukan operasi apa saja yang Anda inginkan dengan alat seperti scantailoratau apa pun yang Anda suka.

Lebih banyak jawaban langsung

Jika Anda hanya ingin OCR file PDF, Anda dapat menggunakan program yang terpelihara dengan baik dan sudah dikemas, yaitu ocrmypdf .

rbrito
sumber
Perhatikan bahwa x-ppi(resolusi x dalam DPI) dan y-ppi(resolusi y dalam DPI) TIDAK ditampilkan pada versi yang lebih lama pdfimagesyang datang dengan Ubuntu 14.04, misalnya. Apa yang tersedia di Ubuntu 18.04, bagaimanapun, tidak termasuk nilai-nilai ini. pdfimages -vpada mesin Ubuntu 18.04 saya menunjukkan saya memiliki versi 0.62.0, yang memang memiliki fitur-fitur ini.
Gabriel Staples
@GabrielStaples, terima kasih telah menunjukkannya. Saya pikir Ubuntu 14.04 sudah EOL'ed, tetapi "hanya" yang memiliki Dukungan Standar yang berakhir Juli 2019 menurut wiki.ubuntu.com/Releases
rbrito
4

Saya memerlukan informasi ini dan baru saja menemukannya di sini:

http://www.wizards-toolkit.org/discourse-server/viewtopic.php?t=16110

Teknik ini juga menggunakan ImageMagick:

identify -format "%w x %h %x x %y" DAT_1.tif

Outputnya adalah ukuran gambar dan dpi:

2480 x 3507 300 x 300
excyberlabber
sumber
Saya akan menambahkan baris baru ke akhir format, jika Anda ingin melakukan * .pdf untuk memproses semua pdf dalam direktori. "% wx% h% xx% y \ n"
Hatoru Hansou
2

Saya menggunakan perintah berikut:

convert MyPDF.pdf -print "Size: %wx%h\n" /dev/null

dan mengembalikan:

Size: 380x380
Mahdi
sumber
Terima kasih - ini mendapatkan ukuran gambar pdf (dalam kasus Anda, 380x380 karena persegi). DPI berbeda. Pada file saya bahwa saya baru saja menjalankan perintah ini, saya dapatkan Size: 595x842meskipun DPI (memeriksa Acrobat) sekitar 130
Jason