Splittare un PDF usando un testo trappola

In queste settimane sto realizzando, usando QGIS, degli atlanti molto complessi, caratterizzati da un layer di copertura con molte righe, testo dinamico, panoramica pilotata da attributi, diverse viste, diverse visualizzazioni di strati informativi con diverse tematizzazioni ecc…

L’esportazione in PDF, per ogni atlante, genera un unico file PDF (con testo ricercabile) con circa 800 pagine, ma il mio obiettivo è di stampare 37 PDF ognuno con un numero variabile di pagine, in pratica dovrei stampare secondo un attributo del layer di copertura. Purtroppo questa funzionalità non c’è ancora nel Print Layout di QGIS e quindi occorre ‘inventarsi‘ qualcosa.

La soluzione che mi suggerisce un caro amico (testa di nicchia) è quella di splittare il PDF (da 800 pagine) dopo l’esportazione da QGIS. In sostanza lo split verrà fatto usando la riga di comando e alcune utility come pdfgrep, pdftk, jq e mlr; lo script è:

#!/bin/bash

set -x
set -e
set -u
set -o pipefail

# if out exists, remove it
if [ ! -f out.txt ]; then
  pdfgrep -n -o "ANDREA:[^ ]*" input.pdf >out.txt
fi

mlr --icsv --ojsonl --implicit-csv-header --ifs ":" label p,trappola,file then nest --ivar " " -f p out.txt >out.jsonl

while read -r line; do
  pagine=$(echo "$line" | jq -r .p)
  file=$(echo "$line" | jq -r .file)

  eval pdftk input.pdf cat $pagine output "$file".pdf
done <out.jsonl

Lo script prende in input il PDF da 800 pagine, estrae un testo trappola presente nelle pagine del PDF (che corrisponde all’attributo secondo cui devo splittare) e crea un file out.txt che utilizzerà successivamente per splittare.

NOTE FINALI: Il risultato è quello desiderato, unico difetto degno di nota è che per PDF di grandi dimensioni e di alta qualità lo script diventa lento.


RIFERIMENTI

RINGRAZIAMENTI


I MIEI CANALI – ISCRIVITI


Se il blog post Ti è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!

SE IL POST/BLOG TI È STATO UTILE CONTRIBUISCI A MANTENERLO AGGIORNATO PAYPAL


Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.