Criando pdf para impressão de livros

Publicado por albert guedes 08/01/2008

[ Hits: 10.070 ]

Homepage: https://teko.net.br

Download bookmaker.bash




Para aqueles que estavam desesperados por um modo de imprimir seus livros sem gastar toneladas de papel e piscinas inteiras de tinta para impressão, publico agora um script para criar um arquivo pdf prontinho para imprimir.

Só é preciso abrir o leitor de pdf e mandar imprimir frente e verso, mais nada.

O script era para minha própria nescessidade, mas muitos scripts que eu li na net não eram completos o que me fez meter a mão na massa e criar este script graças ao pacote de programas pdfjam.

  



Esconder código-fonte

#
# 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.
#
# Críticas e sugestões, escreva para: arcguede@gmail.com
#

# 
# NOTA: É nescessário os seguintes programas instalados no seu sistema:
# pacote pdfjam: pdfnup, pdf90 e pdfjoin.
# pacote tex: latex, dvipdf
# pacote xpdf: pdfinfo
#

#!/bin/bash

# Pega o nome do arquivo.
FILE=$1

# 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- )

# Separa 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
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))

  if [ $FLAG -eq 0 ]
      then

      # Junta duas páginas em um arquivo.
      pdfjoin page$j.pdf page$i.pdf --outfile page$i+$j.pdf
      rm page$i.pdf page$j.pdf

      # Junta duas páginas em uma só folha.
      pdfnup page$i+$j.pdf --outfile pagen$i+$j.pdf
      rm page$i+$j.pdf

      # Como a 'FLAG' é 0, a rotação é em sentido horário.
      pdf90 pagen$i+$j.pdf --outfile A.pdf
      pdf90 A.pdf --outfile B.pdf
      pdf90 B.pdf --outfile pager$i+$j.pdf
      rm pagen$i+$j.pdf A.pdf B.pdf

      FLAG=1

  else

      # Junta duas páginas em um arquivo.
      pdfjoin page$i.pdf page$j.pdf --outfile page$i+$j.pdf
      rm page$i.pdf page$j.pdf

      # Junta duas páginas em uma só folha.
      pdfnup page$i+$j.pdf --outfile pagen$i+$j.pdf
      rm page$i+$j.pdf

      # Como a 'FLAG' é 1, a rotação é em sentido anti-horário.
      pdf90 pagen$i+$j.pdf --outfile pager$i+$j.pdf
      rm pagen$i+$j.pdf

      FLAG=0

  fi

done

# Caso o número de páginas seja impar, vai sobrar uma última página.
[ $(($PAGES-2*$MEAN)) -eq 1 ] && {

    # 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 pagej$PAGES.pdf
    rm blank*
    # # #

    # Junta as duas páginas, a branca e o resto, em uma folha só.
    pdfnup --nup 2x1 pagej$PAGES.pdf --outfile pagen$PAGES.pdf
    rm page$PAGES.pdf blank*.pdf

    # Rotaciona em sentido anti-horário.
    pdf90 pagen$PAGES.pdf --outfile pager$PAGES.pdf
    rm pagen$PAGES.pdf
   
}

# Junta tudo num arquivo só.
pdfjoin --outfile A.pdf pager*+*.pdf
pdfjoin --outfile $DIR/output.pdf A.pdf pager$PAGES.pdf
rm A.pdf pager$PAGES.pdf pager*+*.pdf

echo -e "\n\n Pronto !\n\n"

Scripts recomendados

Acessar celular Motorola via USB

Backup de algumas databases, Remotamente.

Pegando IP externo shell script

Gunzipar arquivos com determinadas extensões

Menu de saída para i3 (versão em Zenity)


  

Comentários
[1] Comentário enviado por albertguedes em 08/01/2008 - 02:19h

===============================================
===================== AVISO ====================
===============================================

A TODOS QUE FOREM USAR ESTE ESCRIPT, ADVIRTO QUE ELE CRIA OS PDFS CORRETAMENTE ATÉ 10 PÁGINAS, PASSANDO DISSO AS PAGINAS SAEM EMBARALHADAS.

Desculpem pelo bug, mas é que ele foi para a fila de publicação sem querer, ainda mandei email para os administradores do site retirarem o scritp, mas parece que ninguém leu a mensagem.
Desculpem o transtorno que possa provocar, mas eu já estou providenciando um script que funcione direito. Só quero evitar que imprimam um monte de folhas e gastem papel e tinta achando que algo está errado com impressora ou programa de impressão.
Mais uma vez, desculpem.

[2] Comentário enviado por rrodrigues345 em 28/01/2010 - 19:14h

Olá Albertoguedes, muito bacana e útil o seu script!! Obrigado pelo aviso ;) Quando vc terminar o script posta aqui que eu vou querer com certeza, hehehe!! Muito bom e criativo!! Até mais!!

[3] Comentário enviado por albertguedes em 28/01/2010 - 19:18h

@ciscokid Já fiz outro meu caro, é que na época que publiquei o daqui não havia a opção de atualização de scripts no VOL.

Dá uma conferida na versão corrigida aqui http://www.vivaolinux.com.br/script/bookmaker.bash-Script-para-imprimir-livros-com-4-paginas-em-uma-...

Qualquer problema ou duvida, entre em contato. t+


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts