O próximo script pega todos os arquivos PDF dentro de uma pasta e, em seguida, para cada um deles, ele é dividido em vários arquivos pequenos com base em um determinado critério, usando pcregexp para buscar esses critérios. Em seguida, comprima os arquivos resultantes e coloque-os em outra pasta:
for ar in *.pdf ; do file="$ar"
pagecount=$(pdfinfo "$file" | grep "Pages" | awk '{ print $2 }')
# Criterio de busqueda y corte: texto "CLIENTE:".
storedid=$(pdftotext -simple -f 1 -l 1 "$file" - | pcregrep -M --ignore-case -o "CLIENTE:\s*[0-9]{5,6}" | grep -Eo "[0-9]{5,6}" | cat)
pattern=''
for (( pageindex=1; pageindex <= $pagecount+1; pageindex+=1 )); do
pageid=$(pdftotext -simple -f $pageindex -l $pageindex "$file" - | pcregrep -M --ignore-case -o "CLIENTE:\s*[0-9]{5,6}" | grep -Eo "[0-9]{5,6}" | cat)
echo "$pageid"
# match ID found on the page to the stored ID
if [[ $pageid == $storedid ]] || [[ $pageid == '' ]]; then
pattern+="$pageindex "
pagetitle+="$header+"
if [[ $pageindex == $pagecount ]]; then
pdftk "$file" cat $pattern output "pre_$storedid.pdf"
storedid=0
pattern=''
#pagetitle=''
fi
else
#process previous set of pages to output
pdftk "$file" cat $pattern output "pre_$storedid.pdf"
storedid=$pageid
pattern="$pageindex "
#pagetitle="$header+"
fi
done
done
#Recorre el directorio desde donde se lo invoca y comprime todos los archivos PDF que inician su nombre de archivo con la palabra "RESUMEN". A cada archivo le asigna el sufijo "_CP" antes de la extensión para diferenciarlo.
for f in *pre_*.pdf ; do pdforiginal="$f" ; pdftops -paper match -nocrop -noshrink -nocenter -level3 -q "$pdforiginal" - | ps2pdf14 -dEmbedAllFonts=true -dUseFlateCompression=true -dProcessColorModel=/DeviceCMYK -dConvertCMYKImagesToRGB=false -dOptimize=true -dPDFSETTINGS=/prepress - - | cpdf -squeeze -stdin -o "dil_${pdforiginal%%.*}.pdf" ; done
#Crea un directorio con año-mes actual.
subdir="$(date +%Y-%m)"
mkdir "$subdir"
#Recorre el dir actual y mueve todos los archivos PDF que comienzan con "RESUMEN" y tienen el sufijo "_CIERTO_" a la carpeta creada previamente.
for f in dil_pre_*.pdf ; do mv "$f" "$subdir/${f#dil_pre_}"; done
#Recorre el dir actual y elimina todos los archivos PDF que comiezan con "RESUMEN" (o sea, los recortes originales).
for f in pre_*.pdf ; do rm -f "$f" ; done
Os scripts funcionam perfeitamente, mas com arquivos PDF grandes (> 150mb), ele fica absurdamente lento (leva 25 segundos para dividir por critérios).
Eu tentei usar o DASH, mas não houve nenhuma atualização significativa. Estou pensando em alguma penalidade de IO que o script está sofrendo, fechando e reabrindo o arquivo PDF grande em cada loop interno, mas não sei como melhorar isso. Alguma idéia?