Criando pdf para impressão de livros

Publicado por albert guedes 08/01/2008

[ Hits: 10.202 ]

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

Script de monitoramento de host por icmp (ping )

Gerenciar usuários do OpenLDAP com Sistema ZIMBRA

Fatsort Zenity

Catsort - Concatenar resultado filtrando e removendo repetidas

Relatório de suprimentos da empresa


  

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