バッチpdf-ocrを処理するための次のスクリプトがありますが、うまくいきます。
#!/bin/sh
# apt-get install exactimage tesseract-ocr ghostscript
# bash tut: http://linuxconfig.org/bash-scripting-tutorial
# Linux PDF,OCR: http://blog.konradvoelkel.de/2013/03/scan-to-pdfa/
y="`pwd`/$1"
echo Will create a searchable PDF for $y
x=`basename "$y"`
name=${x%.*}
mkdir "$name"
cd "$name"
# splitting to individual pages
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -dTextAlphaBits=4 -o out_%04d.jpg -f "$y"
# process each page
for f in $( ls *.jpg ); do
# extract text
tesseract -l eng -psm 3 $f ${f%.*} hocr
# echo Page ?? of ?? done!
# remove the “<?xml” line, it disturbed hocr2df
grep -v "<?xml" ${f%.*}.html > ${f%.*}.noxml
rm ${f%.*}.html
# create a searchable page
hocr2pdf -i $f -s -o ${f%.*}.pdf < ${f%.*}.noxml
rm ${f%.*}.noxml
rm $f
done
# combine all pages back to a single file
# from http://www.ehow.com/how_6874571_merge-pdf-files-ghostscript.html
gs -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=../${name}_searchable.pdf *.pdf
cd ..
rm -rf $name
入力PDFファイルの総ページ数のうち、どのページが完了しているかをエコーしたいと思います。
答え1
ページごとに扱われたのでこれはbashを使用して行うことができます。算術評価。
現在読んだ部分を置き換える
# process each page
for f in $( ls *.jpg ); do
# extract text
次の内容があります。
CURRENT_PAGE=0
# process each page
for f in *.jpg ; do
CURRENT_PAGE=$(( $CURRENT_PAGE + 1 ))
echo Processing page $CURRENT_PAGE ...
# extract text
算術評価を示します$(( ... ))
。man bash
詳しくは検索をご覧くださいARITHMETIC EVALUATION
。
ページ0から始めて、最初のファイルを処理する直前に1を追加してから、現在のページ番号を印刷します。
printというコマンドに独自の出力がない場合は、その行をecho
次のように置き換えるとよりきれいな出力が得られます。
printf "Processing page %d ...\r" $CURRENT_PAGE
\r
「行の先頭に戻る」(技術的にはキャリッジリターンと見なされます)を意味するため、次のコマンドの出力が印刷したばかりの内容を上書きします。完了後にスクリプトを表示するには、最後に以下を追加します。
printf "\n"
次の行に移動します。
そしてテデンで指摘するコメント、本当に使用する必要があります
for f in *.jpg
むしろfor f in $( ls *.jpg )
それは別の質問です。 (私はこれを上に統合しました。)$f
同じ理由で、何らかの方法で参照する変数拡張の周りに引用符を追加することをお勧めします。