Como posso mesclar arquivos pdf para que cada arquivo comece em um número de página ímpar?

10

Eu preciso mesclar alguns pdfs cochilados, e eu quero que todos os pdfs de entrada iniciem em uma página ímpar no pdf de saída.

Exemplo: A.pdf tem 3 páginas, B.pdf tem 4 páginas. Eu não quero que minha saída tenha 7 páginas. O que eu quero é um pdf de 8 páginas no qual as páginas 1-3 são de A.pdf , a página 4 está vazia e as páginas 5-8 são de B.pdf . Como posso fazer isso?

Eu sei sobre o pdftk, mas não encontrei essa opção na página do manual.

    
por Jan Warchoł 28.02.2013 / 17:04

4 respostas

6

A biblioteca PyPdf facilita esse tipo de coisa se você estiver disposto a escrever um pouco de Python. Salve o código abaixo em um script chamado pdf-cat-even (ou o que você quiser), torne-o executável ( chmod +x pdf-cat-even ) e execute-o como um filtro ( ./pdf-cat-even a.pdf b.pdf >concatenated.pdf ). Você precisa de pyPdf ≥1.13 para o método addBlankPage .

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
output_page_number = 0
alignment = 2           # to align on even pages
for filename in sys.argv[1:]:
    # This code is executed for every file in turn
    input = PdfFileReader(open(filename))
    for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
        # This code is executed for every input page in turn
        output.addPage(p)
        output_page_number += 1
    while output_page_number % alignment != 0:
        output.addBlankPage()
        output_page_number += 1
output.write(sys.stdout)
    
por 28.02.2013 / 21:14
3

O primeiro passo é produzir um arquivo pdf com uma página vazia. Você pode fazer isso facilmente com vários programas (LibreOffice / OpenOffice, inkscape, (La) TeX, scribus, etc.)

Depois, basta incluir essa página vazia, onde necessário:

pdftk A.pdf empty_page.pdf B.pdf output result.pdf 

Se você quiser fazer isso automaticamente com um script, você pode usar, e. pdftk file.pdf dump_data | grep NumberOfPages | egrep -o '[0-9]*' para extrair a contagem de páginas.

    
por 28.02.2013 / 17:14
1

A resposta de Gilles funcionou para mim, mas como eu tenho que mesclar muitos arquivos, é mais conveniente se eu puder leia seus nomes em um arquivo de texto. Eu modifiquei ligeiramente o código de Gilles para fazer exatamente isso, talvez ajudaria alguém:

#!/usr/bin/env python

# requires PyPdf library, version 1.13 or above -
# its homepage is http://pybrary.net/pyPdf/
# running: ./this-script-name file-with-pdf-list > output.pdf

import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
output_page_number = 0

# every new file should start on (n*alignment + 1)th page
# (with value 2 this means starting always on an odd page)
alignment = 2

listoffiles = open(sys.argv[1]).read().splitlines()
for filename in listoffiles:
    # This code is executed for every file in turn
    input = PdfFileReader(open(filename))
    for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
        # This code is executed for every input page in turn
        output.addPage(p)
        output_page_number += 1
    while output_page_number % alignment != 0:
        output.addBlankPage()
        output_page_number += 1
output.write(sys.stdout)
    
por 01.03.2013 / 13:26
1

Você também pode usar o LaTeX para fazer isso (embora eu saiba que provavelmente não é o que você quer). Algo como o seguinte deve funcionar:

\documentclass{book}

\usepackage{pdfpages}

\begin{document}

\includepdf[pages=-]{A}
\cleardoublepage % Make sure we clear to an odd page
\includepdf[pages=-]{B} % This inserts all pages. Or you can specify specific pages, a range, or '{}' for a blank page

\end{document}

Observe que \cleardoublepage apenas insere uma página em branco com classes criadas para impressão frente e verso (por exemplo, livro)

Mais opções e informações sobre pdfpages podem ser encontradas em CTAN .

    
por 28.02.2013 / 17:22

Tags