私は持っていますスキャンしたPDFファイル、品質の低いORテキストが含まれています。
OCRテキストのないPDFファイルが必要です。
OCR処理されたテキストを含むスキャンしたPDFをOCR処理されたテキストを含まないスキャンされたPDFに変換するには?
各ページの幅と高さをピクセル単位で変更せずに、各ページのインチあたりのピクセル数を変更せずに、OCRの前にスキャンした元のPDFファイルにできるだけ近づける方法があるかどうか疑問に思います。
どのようなラスター化が再び役に立ちますか?ラスター化すると画質が再び低下しますか?
多くの試み:
- 私はEvinceで印刷ファイルを使用していますが、
cups-pdf
OCRされたテキストは削除しません。 次のコマンドを使用しても
gs
OCRされたテキストは削除されません(まだ正しく使用する方法が見つからないようですgs
)。gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \ -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf toc.pdf
答え1
これを行う必要がある場合は、次のようにOCRテキストを削除します。
まず、PDFのOCRテキストがOCRテキストではないことに注意してください。フロアしかし、特別なテキストレンダリングモード。下のスクリーンショット公式PDF仕様から利用可能なすべてのテキストレンダリングモードを一覧表示します。
詳細な背景については、StackOverflow で次の回答をご覧ください。
今私が想像するプログラムは次のとおりです。
0. オリジナルPDFファイルのバックアップ
ヌープは言った…
1.qpdf
ほとんどのPDFオブジェクトを解凍するために使用されます。
qpdf
sed
ほとんどのPDFをテキストエディタ(または以下を介して)で操作しやすい形式に変換する素晴らしいコマンドラインツールです。
qpdf \
--qdf \
--object-streams=disable \
input.pdf \
editable.pdf
2. PDFコードに含まれる場所を検索してください3 Tr
「見えない」場所editable.pdf
(別名。パディングも愛撫でもない) 初期定義で表示されるテキスト
3 Tr
今読めるように変更してください。
1 Tr
これにより、以前に隠されたテキストが表示されます。文字の外観は、スキャンした元のページ画像の上に太い輪郭で表示されます。
とても醜いようです。
編集したPDFを保存します。
3. ストローク演算子Tj
とテキストを「no-ops」に変更します。TJ
テキスト文字列をレンダリングする準備ができたときはいつでも、これを実行する実際の演算子の名前はまたはTj
ですTJ
。
それらすべてに注意を払う。tJ
とに置き換えてくださいtj
。これは「no-op」に変更されます。 PDFソースコードではまったく意味がなく、PDFビューアやプロセッサもこれを「理解」することはできません。 (PDFソースコードの内容を置き換えるときは、バイト数を変更しないように注意してください。これが「破損」する可能性があります。)
PDFファイルを保存します。
4. 今PDFファイルがどのように見えるかを確認してください
これでPDFは再び「きれいに」見えます。名前が変更されたテキスト演算子は、もはやPDFビューアやPDFソルバーには意味がありません。
5. Ghostscriptを使用して最終PDFを作成する
このコマンドを使用すると、目的の結果を得ることができます。
gs \
-o final.pdf \
-sDEVICE=pdfwrite \
-dPDFSETTINGS=/prepress \
editable.pdf
最後のステップがeditable.pdf
入力として使用されます。出力final.pdf
はテキストのすべての痕跡を削除します。スチール入力持つ演算子の名前が変更されたため、「使用できない」形式ですが、テキストです。 Ghostscript は名前が変更された演算子を「理解する」ことができないため、デフォルトではその演算子をスキップします。
答え2
ファイルからORされたテキストを削除する方法はいくつかあります。
PDFからスキャンした画像をエクスポートして再結合します。
pdfimages
(パッケージから)を使用してそれらを抽出しpoppler-utils
(convert
から)imagemagick
再変換できます。pdfimages toc.pdf toctmp convert toctmp*.pbm newtoc.pdf
PDFで印刷(PDF対応
cups-pdf
)
PDFは画像スキャンには適していませんが、1つのファイルに複数のページを含めることができるため、よく使用されます。ただし、保存形式は通常JPEG(スキャン用)には適していません。スキャンした画像からPDFを作成するのは通常、スキャン後の品質を低下させるステップなので、PDF(スキャンした元のPDFファイルがない場合)から元の画像を復元することは不可能です。pdfimage
PDFで画像を使用またはインポートしようとすることができますが、pdftoppm
PDFの画像を処理するOCRソフトウェアはすでにそのPDFから最高品質の画像を取得する方法を知っているため、これを改善するために何もする可能性はありません。
問題は、OCRソフトウェアではなくスキャンソフトウェアにある可能性があります。元の素材がまだ残っている場合は、別のコピーを複数ページのTIFF(lzw圧縮)でスキャンすると、JPEGを含むPDFに変換されたものよりも優れたOCRを提供できます。
答え3
接続しようとするとサンプルスキャンファイルへのリンク以前は私にはうまくいきませんでした。しかし、その間私はそれをダウンロードして詳細に見ました。
1.pdfimages -list
埋め込みイメージ研究のため
Popplerバリアントの最新(!)バージョンを実行すると、パラメータを使用pdfimages
できます。-list
このパラメータは、PDFファイルに含まれている便利な画像のリストを印刷します。これ最大最新バージョンでは、以前は使用できなかったいくつかの追加情報(画像の解像度や圧縮率など)も提供されています。
残念ながら、PDFファイルには、出力が歪んでいるいくつかの構文エラーが含まれています。
kp@mbp:#175536> pdfimages -l 1 -list toc.pdf
Syntax Warning: Couldn't link the profiles
Syntax Warning: Can't create transform
Syntax Warning: Couldn't link the profiles
Syntax Warning: Can't create transform
Syntax Warning: Couldn't link the profiles
Syntax Warning: Can't create transform
Syntax Warning: Couldn't link the profiles
Syntax Warning: Can't create transform
page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------
1 0 image 2000 2650 icc 1 1 jbig2 no 51 0 300 300 12.4K 1.9%
それでは<stderr>
、出力を次にリダイレクトしてもう一度やり直して/dev/null
みましょう。
kp@mbp:#175536> pdfimages -list toc.pdf 2>/dev/null
page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------
1 0 image 2000 2650 icc 1 1 jbig2 no 51 0 300 300 12.4K 1.9%
2 1 image 2012 2659 icc 1 1 jbig2 no 616 0 300 301 16.1K 2.5%
3 2 image 2014 2661 icc 1 1 jbig2 no 696 0 301 300 16.0K 2.4%
4 3 image 2000 2650 icc 1 1 jbig2 no 778 0 300 300 16.2K 2.5%
5 4 image 2000 2650 icc 1 1 jbig2 no 855 0 300 300 16.2K 2.5%
6 5 image 2000 2650 icc 1 1 jbig2 no 938 0 300 300 15.7K 2.4%
7 6 image 2000 2650 icc 1 1 jbig2 no 1026 0 300 300 15.5K 2.4%
8 7 image 2022 2667 icc 1 1 jbig2 no 1103 0 300 300 15.7K 2.4%
9 8 image 2000 2650 icc 1 1 jbig2 no 1190 0 300 300 15.5K 2.4%
10 9 image 2011 2658 icc 1 1 jbig2 no 1271 0 300 301 15.7K 2.4%
11 10 image 2000 2650 icc 1 1 jbig2 no 1347 0 300 300 15.7K 2.4%
12 11 image 2010 2657 icc 1 1 jbig2 no 1429 0 300 300 15.5K 2.4%
13 12 image 2000 2650 icc 1 1 jbig2 no 1504 0 300 300 16.8K 2.6%
14 13 image 2000 2650 icc 1 1 jbig2 no 1589 0 300 300 15.4K 2.4%
15 14 image 2000 2650 icc 1 1 jbig2 no 1666 0 300 300 17.6K 2.7%
16 15 image 2010 2657 icc 1 1 jbig2 no 1740 0 300 300 18.7K 2.9%
17 16 image 2006 2654 icc 1 1 jbig2 no 1823 0 300 301 17.7K 2.7%
18 17 image 2007 2656 icc 1 1 jbig2 no 1905 0 300 300 16.9K 2.6%
19 18 image 2000 2650 icc 1 1 jbig2 no 1983 0 300 300 16.7K 2.6%
20 19 image 2000 2650 icc 1 1 jbig2 no 2065 0 300 300 17.4K 2.7%
21 20 image 2000 2650 icc 1 1 jbig2 no 2148 0 300 300 17.4K 2.7%
22 21 image 2011 2658 icc 1 1 jbig2 no 2229 0 300 301 17.2K 2.6%
23 22 image 2006 2654 icc 1 1 jbig2 no 2305 0 300 301 17.5K 2.7%
24 23 image 2000 2650 icc 1 1 jbig2 no 2377 0 300 300 14.5K 2.2%
この出力は次のことを意味します。
- 24枚の写真を含む24ページ(0~23番)(1ページあたり1枚)。
- すべての画像のサイズ(幅/高さ)は非常に似ており、解像度は300 PPIです。
- すべての画像は同じ圧縮方法を使用し、JBIG2。
この結果、私はPDFからOCRテキストを削除するための他のアプローチを提案するという自信を得ました。
- すべての画像を抽出します。
- この画像で新しいPDFを作成します。
2. PDFからすべての画像を抽出する
最新のPopplerバージョンの1つを使用している場合は、pdfimages
JBIG2圧縮で画像を抽出できます。
pdfimages -jbig2 toc.pdf toc--
結果イメージファイルのファイル名はtoc---000.jb2e
、、、toc---000.jb2e
...(サフィックス.jb2e
)です。これらの各ファイルには toc---000.jb2g
、、、toc---000.jb2g
...(サフィックス.jb2g
)という名前の異なるファイルが必要です。
.jb2e
画像を取得できず、代わりに.pbm
JPEGを生成するためにImageMagickの変換を使用する必要がある場合:
for i in toc--*.pbm; do
convert $i ${i/.pbm/.jpg}
done
しかし、JPEG画像はJBIG2画像よりはるかに大きい。 (試してみました:24枚の画像を含むJPEGの場合は合計15MB、PBMの場合は合計15MB、JBIG2の場合は合計436KB!)
3.抽出した画像から新しいPDFを作成します。
残念ながらJPEGに変換する必要がある場合は、PDFに変換できます。
convert toc--*.jpg -density out.pdf
望むより! 、今15MBのPDFファイルができました。いいえOCR処理されたテキスト、以前は1.6MBのPDFファイルがありました。そしてOCRテキスト! (しかし、以前の資質はあまり失われません...)
私のコードはpdfimages
ソースからコンパイルされているので、時にはエラーが発生します。現時点では、画像をJBIG2ファイルに正しく抽出できません。そのため、PDFを作成することもできません。しかし、このPDFのサイズはtoc.pdf
元のサイズに似ています。
答え4
高品質の多層PDFのために私が見つけた最良の方法はとinkscape
を使用することですimg2pdf
。私は次のようなクイックbash
スクリプトを作成しました。
#!/bin/bash
mkdir "$1_temp"
cp "$1" "$1_temp"/to_do.pdf
cd "$1_temp"
pdftk to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {} inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png
rm *.pdf
ls ./p*.png | xargs -L1 -I {} convert {} -quality 100 -density 300 - {}.jpg
rm *.pdf
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
rm *.jpg
pdftk *.pdf cat output combined.pdf