Dies sollte funktionieren, es benötigt pdftk
Tool (und ghostscript
).
Ein einfacher Fall:
Erster Schritt: In einzelne Seiten aufteilen
pdftk clpdf.pdf burst
Dadurch werden Dateien erstellt pg_0001.pdf, pg_0002.pdf, ... pg_NNNN.pdf
, eine für jede Seite. Es werden auch doc_data.txt
Seitenabmessungen erstellt.
Schritt zwei: Erstellen Sie linke und rechte halbe Seiten
pw=`cat doc_data.txt | grep PageMediaDimensions | head -1 | awk '{print $2}'`
ph=`cat doc_data.txt | grep PageMediaDimensions | head -1 | awk '{print $3}'`
w2=$(( pw / 2 ))
w2px=$(( w2*10 ))
hpx=$(( ph*10 ))
for f in pg_[0-9]*.pdf ; do
lf=left_$f
rf=right_$f
gs -o ${lf} -sDEVICE=pdfwrite -g${w2px}x${hpx} -c "<</PageOffset [0 0]>> setpagedevice" -f ${f}
gs -o ${rf} -sDEVICE=pdfwrite -g${w2px}x${hpx} -c "<</PageOffset [-${w2} 0]>> setpagedevice" -f ${f}
done
Schritt 3: Führen Sie links und rechts zusammen, um eine newfile.pdf
einzelne Seite als PDF zu erstellen .
ls -1 [lr]*_[0-9]*pdf | sort -n -k3 -t_ > fl
pdftk `cat fl` cat output newfile.pdf
Ein allgemeinerer Fall:
Im obigen Beispiel wird davon ausgegangen, dass alle Seiten gleich groß sind. Die doc_data.txt
Datei enthält die Größe für jede geteilte Seite. Wenn der Befehl
grep PageMediaDimensions <doc_data.txt | sort | uniq | wc -l
Gibt nicht 1 zurück, dann haben die Seiten unterschiedliche Abmessungen und in Schritt 2 ist eine zusätzliche Logik erforderlich .
Wenn die Aufteilung nicht genau 50:50 beträgt, wird eine bessere Formel als w2=$(( pw / 2 ))
im obigen Beispiel benötigt.
Dieses zweite Beispiel zeigt, wie mit diesem allgemeineren Fall umgegangen wird.
Erster Schritt: Teilen Sie mit pdftk
wie zuvor
Schritt 2: Erstellen Sie nun drei Dateien, die die Breite und Höhe jeder Seite und einen Standardwert für den Bruchteil der Teilung enthalten, den die linke Seite verwendet.
grep PageMediaDimensions <doc_data.txt | awk '{print $2}' > pws.txt
grep PageMediaDimensions <doc_data.txt | awk '{print $3}' > phs.txt
grep PageMediaDimensions <doc_data.txt | awk '{print "0.5"}' > lfrac.txt
Die Datei lfrac.txt
kann von Hand bearbeitet werden, wenn Informationen zum Teilen verschiedener Seiten verfügbar sind.
Schritt 3: Erstellen Sie nun linke und rechte geteilte Seiten mit den verschiedenen Seitengrößen und (falls bearbeitet) verschiedenen Bruchstellen für die Teilung.
#!/bin/bash
exec 3<pws.txt
exec 4<phs.txt
exec 5<lfrac.txt
for f in pg_[0-9]*.pdf ; do
read <&3 pwloc
read <&4 phloc
read <&5 lfr
wl=`echo "($lfr)"'*'"$pwloc" | bc -l`;wl=`printf "%0.f" $wl`
wr=$(( pwloc - wl ))
lf=left_$f
rf=right_$f
hpx=$(( phloc*10 ))
w2px=$(( wl*10 ))
gs -o ${lf} -sDEVICE=pdfwrite -g${w2px}x${hpx} -c "<</PageOffset [0 0]>> setpagedevice" -f ${f}
w2px=$(( wr*10 ))
gs -o ${rf} -sDEVICE=pdfwrite -g${w2px}x${hpx} -c "<</PageOffset [-${wl} 0]>> setpagedevice" -f ${f}
done
Schritt 4: Dies ist der gleiche Zusammenführungsschritt wie im vorherigen, einfacheren Beispiel.
ls -1 [lr]*_[0-9]*pdf | sort -n -k3 -t_ > fl
pdftk `cat fl` cat output newfile.pdf