você está aqui: Home  → Arquivo de Mensagens

Livros no formato A5 - Economize folhas imprimindo 4 páginas em uma folha A4

Colaboração: Carlos J.

Data de Publicação: 20 de Março de 2006

A idéia abaixo surgiu quando quis imprimir um livro em A5 (A5 é metade de uma A4 que é a folha que se compra normalmente na papelaria e a impressora usa).

Como A5 é metade da A4, é possível imprimir 4 páginas do livro usando apenas uma folha A4, o que é bem econômico. Um livro de 100 páginas usaria 25 páginas A4 apenas (frente e verso).

Mas há um problema: na hora de agrupar as folhas em 2 e imprimir, acaba saindo errado. Por exemplo, de um lado imprime as páginas 1 e 2, do outro, 3 e 4. Se eu dobrar esse papel, a página 3 fica atrás da página 1. O desejável é que a página 2 fique atrás da página 1. Se mandar imprimir apenas as páginas ímpares e agrupar em 2 folhas por página, vão sair as páginas 1 e 3 na frente e 4 e 2 no verso, por causa da ordem do agrupamento.

É frustante a ordem sair ao contrário do que se espera

Confesso que é um caso bem específico, mas ainda assim foi um dificuldade.

Com o software joinPDF, é possível quebrar o PDF e reordenar as páginas de uma forma que, quando agrupadas, a impressão saia na ordem correta (frente: página 1, verso: página 2)

Segue o script que me ajudou a tornar isso possível:

#!/bin/sh

#
#  Reordena um arquivo PDF em A5 para poder virar um livro
#  a ser impresso em A4. No final, basta imprimir as páginas
#  ímpares e no verso as pares do arquivo final.
#

if [ "X$1" == "X" -o "$1" == "-h" -o "$1" == "--help" ]; then
echo "Uso: $0  [arquivo saida]"
exit
fi

if [ ! -f "$1" ]; then
echo "Arquivo $1 não existe."
exit
fi

a=`/usr/bin/splitPDF "$1" | wc -l `

# Há 1 entrada q não se referem à página gerada.
sizeA=$(( $a - 1 ))

if [ $(( $sizeA % 4 )) != 0 ]; then
echo -e "Aviso: arquivo não contêm número de páginas divisível por 4
         Pode sair errado o ordenamento das folhas
	 Favor gerar, mesmo em bran co, as páginas restantes."
fi

cont=0;
start=-2

arrCfg[0]=3
arrCfg[1]=2
arrCfg[2]=1
arrCfg[3]=-2

joinStr=""

arqName=`basename $1 .pdf`

while [ $cont -lt $sizeA ];
do
# A ordem das páginas deve ser 1 e 3 na 1a folha e 4 e 2 no verso,
# para que quando cortadas, fique 1 e 2, 3 e 4.
# A sequência das folhas a serem juntadas seria:
# 1,3,4,2, 5,7,8,6, 9,11,12,10, ...
#
# Resolvi o problema obtendo a diferença entre os elementos.
# o q gera um ciclo de 4 estágios (+3, +2, +1, -2).
#

start=$(( $start + ${arrCfg[ $(( $cont % 4 )) ]} ))

joinStr="$joinStr ${arqName}_page${start}.pdf"

cont=$(( $cont + 1 ))
done

if [ "X$2" == "X" ]; then
arqFinal="${arqName}_final.pdf";
echo "Arquivo de saída não especificado, assumindo $arqFinal"
else
arqFinal=$2;
fi

arqName="__$arqName"

/usr/bin/joinPDF $arqName $joinStr > /dev/null

rm -f $joinStr

pdftops -paper match $arqName - | psnup -q -pa4 -Pa5 -2 | ps2pdf -sPAPERSIZE=a4 - $arqFinal

rm -f $arqName


Veja a relação completa dos artigos de Carlos J.