我有以下用于批量 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
出于同样的原因,我还建议在您以某种方式引用的变量扩展周围添加引号。