From 2fdaa7595c569bd69b7a282aa83e31bb7968597b Mon Sep 17 00:00:00 2001 From: fritz-hh Date: Tue, 23 Apr 2013 22:54:58 +0200 Subject: [PATCH] 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 --- OCRmyPDF.sh | 76 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 26 deletions(-) diff --git a/OCRmyPDF.sh b/OCRmyPDF.sh index d859e6eb..f4827945 100644 --- a/OCRmyPDF.sh +++ b/OCRmyPDF.sh @@ -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