OCRmyPDF.sh: better handling of path and tmp folder

- user can now define the name/location of the output file
- check if the folder in which in/output files should be located exist
- tmp folder now build using timestamp and input file name
This commit is contained in:
fritz-hh
2013-04-23 22:54:58 +02:00
parent 968a66f66b
commit 2fdaa7595c
+50 -26
View File
@@ -12,7 +12,7 @@ tesseract engine)
Copyright: fritz from NAS4Free forum
Version: $VERSION
Usage: OCRmyPDF.sh [-h] [-v] [-g] [-k] [-d] [-c] [-i] [-l language] [-C filename] inputfile
Usage: OCRmyPDF.sh [-h] [-v] [-g] [-k] [-d] [-c] [-i] [-l language] [-C filename] inputfile outputfile
-h : Display this help message
-v : Increase the verbosity (this option can be used more than once)
@@ -29,13 +29,30 @@ Usage: OCRmyPDF.sh [-h] [-v] [-g] [-k] [-d] [-c] [-i] [-l language] [-C filenam
Any language supported by tesseract is supported.
-C : Pass an additional configuration file to the tesseract OCR engine.
(this option can be used more than once)
Note: The configuration file must be available in the .../tessdata/configs folder
inputfile : PDF file to be processed
Note: The configuration file must be available in the "tessdata/configs" folder
of your tesseract installation
inputfile : PDF file to be OCRed
outputfile : The PDF/A file to be generated
--------------------------------------------------------------------------------------
EOF
}
#################################################
# Get an absolute path from a relative path to a file
#
# Returns: 1 if the folder in which the file is located does not exist
# 0 otherwise
#################################################
absolutePath() {
local wdsave absolutepath
wdsave="`pwd`"
! cd "`dirname "$1"`" 1> /dev/null 2> /dev/null && return 1
absolutepath="`pwd`/`basename $1`"
cd "$wdsave"
echo "$absolutepath"
return 0
}
@@ -89,14 +106,23 @@ shift $((OPTIND-1))
# Check if the number of mandatory parameters
# provided is as expected
if [ "$#" -ne "1" ]; then
if [ "$#" -ne "2" ]; then
echo "Exactly one mandatory argument shall be provided"
echo
usage
exit $EXIT_BAD_ARGS
fi
FILE_INPUT_PDF="$1"
! absolutePath "$1" && echo "The folder in which the input file should be located does not exist. Exiting..." && exit $EXIT_BAD_ARGS
FILE_INPUT_PDF="`absolutePath "$1"`"
! absolutePath "$2" && echo "The folder in which the output file should be generated does not exist. Exiting..." && exit $EXIT_BAD_ARGS
FILE_OUTPUT_PDFA="`absolutePath "$2"`"
# set script path as working directory
cd "`dirname $0`"
@@ -114,18 +140,18 @@ FILE_INPUT_PDF="$1"
# Initialize path to temporary files
tmp="./tmp"
FILE_SIZE_PAGES="$tmp/page-sizes.txt" # size in pt of the respective page of the input PDF file
FILES_OCRed_PDFS="${tmp}/*-ocred.pdf" # string matching all 1 page PDF files that need to be merged
FILE_OUTPUT_PDF="${tmp}/ocred.pdf" # name of the OCRed PDF file before conversion to PDF/A
FILE_OUTPUT_PDFA="${tmp}/ocred-pdfa.pdf" # name of the final PDF/A file
FILE_VALIDATION_LOG="${tmp}/pdf_validation.log" # log file containing the results of the validation of the PDF/A file
# delete tmp files
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Removing old temporary files"
rm -r -f "${tmp}"
mkdir -p "${tmp}"
# Initialize path to temporary files
TMP_FLD="./tmp/`date +"%Y%m%d_%H%M"`.filename.`basename "$FILE_INPUT_PDF" | sed s/[.][^.]*//`"
FILE_SIZE_PAGES="$TMP_FLD/page-sizes.txt" # size in pt of the respective page of the input PDF file
FILES_OCRed_PDFS="${TMP_FLD}/*-ocred.pdf" # string matching all 1 page PDF files that need to be merged
FILE_OUTPUT_PDF="${TMP_FLD}/ocred.pdf" # name of the OCRed PDF file before conversion to PDF/A
FILE_VALIDATION_LOG="${TMP_FLD}/pdf_validation.log" # log file containing the results of the validation of the PDF/A file
# Create tmp folder
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Creating temporary folder"
rm -r -f "${TMP_FLD}"
mkdir -p "${TMP_FLD}"
@@ -147,11 +173,11 @@ while read pageSize ; do
[ $VERBOSITY -ge $LOG_INFO ] && echo "Processing page $page"
# create the name of the required file
curOrigImg="$tmp/${page}_Image" # original image available in the current PDF page
curOrigImg="$TMP_FLD/${page}_Image" # original image available in the current PDF page
# (the image file may have a different orientation than in the pdf file)
curHocr="$tmp/$page.hocr" # hocr file to be generated by the OCR SW for the current page
curOCRedPDF="$tmp/${page}-ocred.pdf" # PDF file containing the image + the OCRed text for the current page
curOCRedPDFDebug="$tmp/${page}-debug-ocred.pdf" # PDF file containing data required to find out if OCR worked correctly
curHocr="$TMP_FLD/$page.hocr" # hocr file to be generated by the OCR SW for the current page
curOCRedPDF="$TMP_FLD/${page}-ocred.pdf" # PDF file containing the image + the OCRed text for the current page
curOCRedPDFDebug="$TMP_FLD/${page}-debug-ocred.pdf" # PDF file containing data required to find out if OCR worked correctly
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Page $page: Computing embedded image resolution"
# get width / height of PDF page
@@ -184,9 +210,9 @@ while read pageSize ; do
ext="pgm"
opt="-gray"
fi
curImgPixmap="$tmp/$page.$ext"
curImgPixmapDeskewed="$tmp/$page.deskewed.$ext"
curImgPixmapClean="$tmp/$page.cleaned.$ext"
curImgPixmap="$TMP_FLD/$page.$ext"
curImgPixmapDeskewed="$TMP_FLD/$page.deskewed.$ext"
curImgPixmapClean="$TMP_FLD/$page.cleaned.$ext"
# extract current page as image with right orientation and resoltution
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Page $page: Extracting image as $ext file (${dpi} dpi)"
@@ -288,9 +314,7 @@ grep -i "Status.*Not well-formed" "$FILE_VALIDATION_LOG" && pdf_valid=0
# delete temporary files
if [ $KEEP_TMP -eq 0 ]; then
rm $FILES_OCRed_PDFS
rm "$FILE_SIZE_PAGES"
rm "$FILE_OUTPUT_PDF"
rm -r -f "${TMP_FLD}"
fi
exit 0