bookmaker.bash: Script para imprimir livros com 4 páginas em uma folha
Publicado por albert guedes 20/06/2008
[ Hits: 8.305 ]
Homepage: https://teko.net.br
Finalmente saiu! Depois do fiasco do meu primeiro script para imprimir em forma de booklets, esse script consegue imprimir 4 páginas em uma folha e coloca na ordem certa para imprimir livros.
É só rodar o script dando o nome do pdf, mandar imprimir frente e verso e PIMBA ! É só mandar encadernar.
Eu testei este script com pdfs de até 1000 páginas, mas se houver problemas, por favor me avisem.
#!/bin/bash # Permição de uso via GPL - http://www.gnu.org/licenses/gpl.txt # bookmaker.bash - Script para imprimir 4 páginas em uma folha de papel, # com duas páginas em cada lado da folha. # Ideal para impressão de livro e economizar. # Versão: 2.0 # Data da versão: 6 de maio de 2008 # Autor: Albert R. C. Guedes # Contato: email: arcguede@gmail.com # albertguedes@hotmail.com # site : socrates.if.usp.br/~arcguede # Notas da versão: # # - acrescentado uma opção de nomeação de arquivo de saida mais decente # e menos ignorante. # - corrigido o problema de numeração das páginas, agora levando # em consideração o numero de digitos totais, como 1000 que tem # quatro digitos, 100 tem três e 10 tem dois. # - agora é usado o diretorio '/var/tmp' em vez de '/tmp' para os # arquivos temporarios, pois este se mostrou mais rápido para # trabalhar. # - se sobrar uma última página de resto, agora ela será realmente a # última. # # Dependencias: pacote pdfjam - pdfnup, pdf90 e pdfjoin. # pacote tex - latex, dvipdf # pacote xpdf - pdfinfo # # # Inicio do script. # # 'FILE' guarda o nome do arquivo que se deseja modificar. # Aqui 'FILE' toma o valor do primeiro argumento como # nome do arquivo a ser modificado caso não tenha sido # usado a opção '-o'. FILE=$1 # Caso seja dada a opção '-o' de nome para o arquivo final, # 'FILE' toma o valor do segundo argumento que é o nome do # arquivo que se deseja modificar. if [ "$1" == '-o' ] then FILE=$2 else # 'OUTPUT' será o nome do arquivo pdf final. OUTPUT=$( echo "$FILE" | sed -e 's/\\..*$//g' ) OUTPUT="out-$OUTPUT.pdf" fi # Pega o nome do diretório atual. DIR=$( pwd ) # Pega o número de páginas do arquivo. PAGES=$( pdfinfo $FILE | grep Pages | cut -d' ' -f11- ) # Extrai as páginas do arquivo uma por uma. for((i=1;i<=$PAGES;i++)) do pdfnup --nup 1x1 --pages $i --outfile /tmp/page$i.pdf $FILE done cd /tmp # Calcula a página do meio. MEAN=$(($PAGES/2)) # 'FLAG' é para indicar o sentido de rotação das páginas. FLAG=0 # 'idx' é contador de novas páginas. idx=0 for((i=1;i<=$MEAN;i++)) do # 'i' é pagina que fica a direita da folha, e 'j' a da esquerda. j=$((2*$MEAN-$i+1)) let idx++ # 'PG' é o número do arquivo pdf que contem a página 'idx'. # Caso o livro tenha entre 100 e 999 páginas, o 'PG' fica na forma de 3 dígitos. [ $PAGES -lt 1000 -a $PAGES -ge 100 ] && { PG=$idx [ $idx -lt 100 ] && PG="0$idx" [ $idx -lt 10 ] && PG="00$idx" } # Caso o livro tenha entre 10 e 99 páginas, o 'PG' fica na forma de 2 dígitos. [ $PAGES -lt 100 -a $PAGES -ge 10 ] && { PG=$idx [ $idx -lt 10 ] && PG="0$idx" } # Caso o livro tenha entre 0 e 9 páginas, o 'PG' fica na forma de 1 dígitos. [ $PAGES -lt 10 ] && PG=$idx if [ $FLAG -eq 0 ] then # Junta duas páginas em um arquivo. pdfjoin page$j.pdf page$i.pdf --outfile A.pdf rm page$i.pdf page$j.pdf # Junta duas páginas em uma só folha. pdfnup A.pdf --outfile B.pdf rm A.pdf # Como a 'FLAG' é 0, a rotação é em sentido horário. pdf90 B.pdf --outfile A.pdf rm B.pdf pdf90 A.pdf --outfile B.pdf rm A.pdf pdf90 B.pdf --outfile page-$PG.pdf rm B.pdf FLAG=1 else # Junta duas páginas em um arquivo. pdfjoin page$i.pdf page$j.pdf --outfile A.pdf rm page$i.pdf page$j.pdf # Junta duas páginas em uma só folha. pdfnup A.pdf --outfile B.pdf rm A.pdf # Como a 'FLAG' é 1, a rotação é em sentido anti-horário. pdf90 B.pdf --outfile page-$PG.pdf rm B.pdf FLAG=0 fi done # Caso o número de páginas seja impar, vai sobrar uma última página. if [ $(($PAGES-2*$MEAN)) -eq 1 ] then # Nesta parte, caso exista um número impar de páginas, irá sobrar uma no final. # Por isso, é criado uma folha de PDF em branco e juntado a pagina que sobrou. # # # echo "\documentclass[12pt,a4paper]{article}\begin{document}\end{document}" > blank.tex latex blank.tex dvipdf blank.dvi blank.pdf # # # pdfjoin blank.pdf page$PAGES.pdf --outfile A.pdf rm blank* page$PAGES.pdf # Junta as duas páginas, a branca e o resto, em uma folha só. pdfnup --nup 2x1 A.pdf --outfile B.pdf rm A.pdf # Rotaciona em sentido anti-horário. pdf90 B.pdf --outfile A.pdf rm B.pdf # Junta tudo num arquivo só. pdfjoin page-*.pdf A.pdf --outfile $DIR/$OUTPUT rm page-*.pdf A.pdf else # Junta tudo num arquivo só. pdfjoin page-*.pdf --outfile $DIR/$OUTPUT rm page-*.pdf fi echo -e "\n\n Pronto !\n\n" # # Fim do script. #
Baixando fotos de uma câmera digital pela USB
Backup de Maquina Virtual (Vmware)
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (4)
Instalação do drive do adaptador wiffi (5)