Isso deve funcionar e precisa de pdftk
tool (e ghostscript
).
Um caso simples:
Primeiro passo: dividido em páginas individuais
pdftk clpdf.pdf burst
isso produz arquivos pg_0001.pdf, pg_0002.pdf, ... pg_NNNN.pdf
, um para cada página.
Também produz doc_data.txt
, que contém dimensões de página.
Segundo passo: Crie meia página à esquerda e à direita
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
Etapa três: mesclar para a esquerda e para a direita para produzir newfile.pdf
contendo uma única página .pdf.
ls -1 [lr]*_[0-9]*pdf | sort -n -k3 -t_ > fl
pdftk 'cat fl' cat output newfile.pdf
Um caso mais geral:
-
O exemplo acima supõe que todas as páginas são do mesmo tamanho. O arquivo
doc_data.txt
contém tamanho para cada página dividida. Se o comandogrep PageMediaDimensions <doc_data.txt | sort | uniq | wc -l
não retorna 1, as páginas têm dimensões diferentes e algumas lógica extra é necessária no Passo Dois .
-
Se a divisão não for exatamente 50:50, será necessária uma fórmula melhor que
w2=$(( pw / 2 ))
, usada no exemplo acima.
Este segundo exemplo mostra como lidar com esse caso mais geral.
Primeiro passo: dividido com pdftk
como antes
Passo Dois: Agora crie três arquivos que contenham a largura e a altura de cada página e um padrão para a fração da divisão que a página à esquerda usará.
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
o arquivo lfrac.txt
pode ser editado manualmente se a informação estiver disponível
para onde dividir páginas diferentes.
Etapa três: Agora crie páginas divididas à esquerda e à direita, usando os diferentes tamanhos de página e (se editados) diferentes locais fracionários para a divisão.
#!/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
Quarto passo: Este é o mesmo passo de mesclagem do exemplo anterior, mais simples.
ls -1 [lr]*_[0-9]*pdf | sort -n -k3 -t_ > fl
pdftk 'cat fl' cat output newfile.pdf