#!/bin/bash # Umbrella function to simplify use of pdftk # Created April 20, 2010 # Taha Ahmed, taha@chepec.se # ************************** # Usage: # ARG 1: filename of pdf, e.g., 'oxides.pdf' # ARG 2: specify operation, # - 'dump_data' --> writes metadata to $reportfile in current directory # ARG 3: used when updating metadata, specifies the input text file # $* Stores all the arguments that were entered on the command line ($1 $2 ...). # $@ Stores all the arguments that were entered on the command line, individually quoted ("$1" "$2" ...). # -o is logical OR - can be evaluated within single brackets # -a is logical AND - can be evaluated within single brackets ############################################################# ## Original pdftk syntax ## ********************* ## Dump metadata to file #= pdftk dump_data output <$reportfile> ## Update metadata from file #= pdftk update_info <$reportfile> output ############################################################# # Perhaps good to save original PDF # Could be nice to be able to input metadata updates directly at the bash prompt, something like # First, script displays current fields # echo Which field do you want to update/create? # echo # read choice newfieldinfo # do the whole pdftk update stuff # voila! #set -x # for debugging NAME=$(basename $0) echo "***********************************************************" echo "This is $NAME. Write $NAME -h for help." # Set defaults DUMPMETADATA=yes # default action UPDATEMETADATA=no # Set filetypes pdfext=".pdf" metadataext=".pdfmeta" usage () { cat <.pdfmeta $NAME .pdf AUTHOR Taha Ahmed EOF } OPTIONS=$@ for OPTION in "$@"; do case "$OPTION" in -h | --help ) usage exit 0 ;; -a | --all ) # Perform default action on all PDFs in current directory ;; * ) # no options, just run with default settings ;; esac done FILES=$OPTIONS # Check if no input files were given if [ ! -n "$FILES" ]; then # Perhaps do default action for all pdf files in current directory? echo -e "\nError: There is no input files! Usage is:\n" usage exit 1 fi # Check file types (pre-assumes a file extension exists) for FILE in "$FILES"; do PDFFILE=$(echo $FILE | grep '.[Pp][Dd][Ff]$') TEXFILE=$(echo $FILE | grep '.[Tt][Ee][Xx]$') if [ ! -n "$PDFFILE" -a ! -n "$TEXFILE" ]; then echo "$FILE is not a supported file type!" echo "It should be one of: .pdf or .tex" exit 1 fi NEWFILES="$NEWFILES $FILE" unset PDFFILE TEXFILE done FILES=$NEWFILES # Execution for FILE in "$FILES"; do # Metadata filename is pdf basename plus .pdfmeta extension METADATAFILE=${FILE%.*}$metadataext # metadata filename if [ "$DUMPMETADATA" = "yes" ]; then #echo "pdftk $FILE dump_data output $METADATAFILE" ## It seems pdftk has problems dealing with spaces in filenames or paths. ## Possible work-arounds: ## Escape spaces with back-slashes? ## Check for spaces in filename, if present, copy to temporary file without spaces, ## then run call pdftk, then rename again... pdftk $FILE dump_data output $METADATAFILE fi done exit 0 ### STUFF BELOW IS OLD reportfile=./chepdftk-report.txt # Check number of args supplied if [ $# -eq 0 ]; then # Zero arguments echo No arguments given. exit else # Some arguments were passed. if [ $# -eq 1 ]; then # One argument was passed echo One argument. else # More than one argument if [ $# -eq 2 ]; then # Two arguments were passed echo Two arguments. if [ $2 == "dump_data" ]; then pdftk $1 $2 output $reportfile fi else # More than two arguments if [ $# -eq 3 ]; then # Three arguments were passed echo Three arguments. else # More than three arguments echo More than three arguments. Too many. fi fi fi fi