Concatene PDFs, mas amplie os PDFs para um número par de páginas

3

Eu quero concatenar vários PDFs, mas, para fins de impressão, prefiro que páginas vazias sejam adicionadas a cada documento que tenha um número ímpar de páginas. Posso fazer isso com o PDFTK?

    
por adamse 29.03.2016 / 16:17

2 respostas

4

Aqui está um pequeno script simples que itera todos os arquivos pdf no diretório atual e os concatena em um único PDF, usando o LaTeX. PDFs com um número ímpar de páginas terão uma página extra em branco após eles:

#!/bin/bash

cat<<EoF > all.tex
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
EoF

## rename the PDFs to something safe
c=0;
for f in *pdf
do
        ## Link the PDF with a safe name
        ln -s "$f" "$c".pdf
        ## Include the PDF in the tex file
        printf '\includepdf[pages=-]{%s.pdf}\n' "$c" >> all.tex;
        ## Get the number of pages
        pages=$(pdfinfo "$c".pdf | grep -oP '^Pages:\s*\K\d+')
        ## Add an empty page if they are odd
        [[ $(expr "$pages" % 2) != 0 ]] && 
            printf '%s\n' "\newpage\null" >> all.tex

        ((c++));
done

printf '\end{document}' >> all.tex;
pdflatex all.tex

Como este é o LaTeX, você pode fazer todo tipo de material extra. Por exemplo, você pode ter cada PDF em sua própria seção, com um índice clicável:

#!/bin/bash

cat<<EoF > all.tex
\documentclass{article}
\usepackage{pdfpages}
\usepackage[colorlinks=true,linkcolor=blue,linktoc=page]{hyperref}
\begin{document}
\tableofcontents
\newpage
EoF
## rename the PDFs to something safe
c=0;
for f in *pdf
do
        ## Link the PDF with a safe name
        ln -s "$f" "$c".pdf
        ## Include the PDF in the tex file
        cat<<EoF >> all.tex
\section{${f//.pdf}}
\includepdf[pages=-]{$c.pdf}
EoF
        ## Get the number of pages
        pages=$(pdfinfo "$c".pdf | grep -oP '^Pages:\s*\K\d+')
        ## This time, because each PDF has its own section title
        ## we want to add a blank page to the even numbered ones
        [[ $(expr "$pages" % 2) = 0 ]] && 
            printf '%s\n' "\newpage\null\newpage" >> all.tex

        ((c++));
done

printf '\end{document}' >> all.tex;
## Need to run it twice to build the ToC
pdflatex all.tex; pdflatex all.tex;
    
por 30.03.2016 / 18:53
3

Certamente. Basta criar uma página em branco com (por exemplo)

echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf

e adicione blank.pdf a cada documento que tenha um número ímpar de páginas. Por exemplo,

pdftk \
BLANK=blank.pdf \
A=foo1.pdf \
B=foo2.pdf \
C=foo3.pdf \
cat A BLANK B BLANK C \
output bar.pdf
    
por 29.03.2016 / 16:38

Tags