riordino pagine e imposizione libretto A5 con pdftk e Multivalent.jar (A5 booklet)

pdftk
http://www.pdflabs.com/
pdftk 1.41 (versione compilata staticamente) [per chi non lo avesse nei repertori software della propria distribuzione]

sebbene non nasca come strumento per l’imposizione, purtuttavia, può risultare utile, nella fase preliminare [il riordino pagine (shuffle for imposing)] per poi affidare l’imposizione vera e propria a Multivalent.jar
Multivalent.jar- ultima versione free coi tool d’imposizione – link 1
Multivalent.jar – ultima versione free coi tool d’imposizione – webseeded torrent link 2

PRIMO PASSO

con pdftk e una versione modificata dello script reorder4booklet, riordiniamo opportunamente le pagine del file pdf

IMPORTANTE

il numero totale delle pagine del file pdf deve tassativamente essere un multiplo di 4
se non lo fossero, occorre aggiungergliene un numero necessario a raggiungere il multiplo intero più prossimo di 4 (es: se il numero di pagine fosse 11, basterebbe aggiungerne un’altra sola per arrivare a 12)

aggiunta che può essere fatta in automatico, con il mio script

addblankforbooklet

#!/bin/sh
#script to add automatically blank pages at the end of a pdf document, in order to make its pages a multiply of 4, so you can print as booklet using Multivalent.jar tool Impose
#
#  download Multivalent.jar (with tools included) from: http://goo.gl/QGgvb 
echo "Enter file name"
read filename
altxlarg="`pdfinfo -box $filename| grep MediaBox | cut -d : -f2 | awk '{print $3 FS $4}'`"
echo "%PDF-1.4
%µí®û
3 0 obj
<<
/Length 0
>>
stream
endstream
endobj
4 0 obj
<<
/ProcSet [/PDF ]
/ExtGState <<
/GS1 1 0 R
>>
>>
endobj
5 0 obj
<<
/Type /Halftone
/HalftoneType 1
/HalftoneName (Default)
/Frequency 60
/Angle 45
/SpotFunction /Round
>>
endobj
1 0 obj
<<
/Type /ExtGState
/SA false
/OP false
/HT /Default
>>
endobj
2 0 obj
<<
/Type /Page
/Parent 7 0 R
/Resources 4 0 R
/Contents 3 0 R
>>
endobj
7 0 obj
<<
/Type /Pages
/Kids [2 0 R ]
/Count 1
/MediaBox [0 0 595 841]
>>
endobj
6 0 obj
<<
/Type /Catalog
/Pages 7 0 R
>>
endobj
8 0 obj
<<
/CreationDate (D:20110915222508)
/Producer (libgnomeprint Ver: 2.12.1)
>>
endobj
xref
0 9
0000000000 65535 f
0000000278 00000 n
0000000357 00000 n
0000000017 00000 n
0000000072 00000 n
0000000146 00000 n
0000000535 00000 n
0000000445 00000 n
0000000590 00000 n
trailer
<<
/Size 9
/Root 6 0 R
/Info 8 0 R
>>
startxref
688
%%EOF" | sed -e "s/595 841/$altxlarg/g">blank.pdf && pdftk blank.pdf output fixed.pdf && mv fixed.pdf blank.pdf
pages="`pdftk $filename dump_data | grep NumberOfPages | cut -d : -f2`"
if [ $(( $pages % 4 )) -eq 0 ]
	then echo "the pages are already a multiple of 4. Script will be stopped" && exit 1
elif [ $(( $pages / 4 )) -eq 0 ]
	then val0="`echo "scale=0; 4-$pages" | bc -l`" 
else val1="`echo "scale=0; $pages/4" | bc -l`"; echo $val1
fi
	if [ $(( $pages / 4 )) -eq 0 ] ; then echo "adding $val0 blank pages" ; sleep 1s && numpages=`for ((a=1; a <= $val0; a++)); do echo -n " B1 "; done` && pdftk A=$filename B=blank.pdf cat A $numpages output 4multiply.pdf
	else
val2="`let ADDITION=$val1+1; echo $ADDITION`"
val3="`let MULTIPLICATION=$val2*4; echo $MULTIPLICATION`"
val4="`echo "scale=0; $val3-$pages" |bc -l`"
echo "adding $val4 blank pages" ; sleep 1s
numpages="`for ((a=1; a <=  $val4; a++)); do echo -n " B1 "; done`"
pdftk A=$filename B=blank.pdf cat A $numpages output 4multiply.pdf
fi

a questo punto, con la versione modificata dello script reorder4booklet

#!/bin/bash
#
#reorder4boolet, uno script per calcolare la corretta sequenza di imposizione per un libretto A5 ricavato stampando due pagine in formato A5 su di un A4 orizzontalmente orientato. Lo script aggiunge le necessarie bianche alla sequenza qualora il numero delle pagine non fosse un multiplo di 4
#
#modificato per il riordino pagine preliminare all'imposizione (shuffle for imposing) con pdftk
#
(($# == 0)) && {
    echo "Usage: $0 number of pages"
    exit 1
} >&2

pages=$1
if [ $(( $pages % 4 )) -eq 0 ]
	then
#pages4="`let DIVISION=$pages/2; echo $DIVISION`"
pages4="$(( $pages/2 ))"

for ((x=$pages, y=1;x>=$pages4, y<=$pages4;x--, y++)); do echo "$x $y "; done | awk 'NR %2==1 {print $1, $2} NR % 2==0 { print $2, $1 }' | tr '\n' ' ' | xargs 
	elif
[ $(( $pages / 4 )) -eq 0 ]
	then
	#echo "number $pages is not a multiple of 4"
		val0="$(( 4-$pages ))" 
else val1="$(( $pages/4 ))"
    #echo "number $pages is not a multiple of 4"
val2="$(( $val1+1 ))"
val3="$(( $val2*4 ))"
val4="$(( $val3-$pages ))"
blankandpages="$(( $pages+$val4 ))"
pages4="$(( $blankandpages/2 ))"
#echo "adding $val4 blank pages" ; sleep 1s
for ((x=$blankandpages, y=1;x>=$pages4, y<=$pages4;x--, y++)); do echo "$x $y "; done | awk 'NR %2==1 {print $1, $2} NR % 2==0 { print $2, $1 }' | tr '\n' ' '| xargs 
fi

exit 0

invochiamo pdftk con questa sintassi:

pdftk file.pdf cat `reorder4booklet numero di pagine` output riordinato.pdf

es: se il nostro pdf ha 64 pagine:
pdftk file.pdf cat `reorder4booklet 64` output riordinato.pdf

che produrrà la seguente sequenza

64 1 2 63 62 3 4 61 60 5 6 59 58 7 8 57 56 9 10 55 54 11 12 53 52 13 14 51 50 15 16 49 48 17 18 47 46 19 20 45 44 21 22 43 42 23 24 41 40 25 26 39 38 27 28 37 36 29 30 35 34 31 32 33
anim-pdf-reordered-with-pdftk
64
64-riordinato

che, con Multivalent.jar, imposizioneremo a due a due su ogni facciata di un foglio A4 orizzontale per ottenere il risultato finale da stampare in fogli A4 e poi tagliare al centro della risma per richiudere le due metà su di se stesse e rilegare il libretto risultante

java -cp /percorso/Multivalent.jar tool.pdf.Impose -sep 0.4 -dim 2×1 -paper 29.7x21cm 64-riordinato.pdf
64-riordinato-up
anim-pdf-reordered-up-with-pdftk

Lascia un commento