일괄 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
같은 이유로, 어떤 방식으로든 참조하는 변수 확장 주위에 따옴표를 추가하는 것이 좋습니다.