Biblioteka PyPdf sprawia, że tego rodzaju rzeczy łatwe, jeśli jesteś gotów napisać trochę Pythona. Zapisz poniższy kod w skrypcie o nazwie pdf-cat-even
(lub cokolwiek chcesz), ustaw go jako wykonywalny ( chmod +x pdf-cat-even
) i uruchom jako filtr ( ./pdf-cat-even a.pdf b.pdf >concatenated.pdf
). Potrzebujesz metody pyPdf ≥1,13 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)
Gilles „SO- przestań być zły”
źródło
./pdf-cat-even $(cat list-of-file-names.txt) >concatenated.pdf
<list-of-file-names.txt tr '\n' '\0' | xargs -0 ./pdf-cat-even >concatenated.pdf
Pierwszym krokiem jest utworzenie pliku pdf z pustą stroną. Możesz to zrobić z łatwością za pomocą wielu programów (LibreOffice / OpenOffice, inkscape, (La) TeX, scribus itp.)
Następnie dołącz tę pustą stronę w razie potrzeby:
Jeśli chcesz to zrobić automatycznie za pomocą skryptu, możesz użyć np.
pdftk file.pdf dump_data | grep NumberOfPages | egrep -o '[0-9]*'
Do wyodrębnienia liczby stron.źródło
pdftk --version
zwraca pdftk 1.44. Pamiętam, że moi bardziej doświadczeni bash przyjaciele spędzili co najmniej 15 minut, próbując różnych rzeczy, aby dostać tę pracę i zrezygnowali.Odpowiedź Gillesa działała dla mnie, ale ponieważ muszę scalić wiele plików, wygodniej jest odczytać ich nazwy z pliku tekstowego. Lekko zmodyfikowałem kod Gillesa, aby to zrobić, być może pomogłoby to komuś innemu:
źródło
Możesz również użyć do tego LaTeXa (choć wiem, że prawdopodobnie nie tego chcesz). Powinno działać coś takiego:
Pamiętaj, że
\cleardoublepage
wstawia tylko pustą stronę z klasami, które są przeznaczone do drukowania dwustronnego (np. Książka)Więcej opcji i informacji
pdfpages
można znaleźć na stronie CTAN .źródło
\includepdf[pages=-]{...}
.\cleardoublepage
wstawia pustą stronę tylko wtedy, gdy używasz klasy przeznaczonej do drukowania dwustronnego. Korzystałem z artykułu, który nie działa; Naprawiłem to i zaktualizowałem pytanie, aby to odzwierciedlić.\includepdf
domyślnie zawiera tylko pierwszą stronę (nie wszystkie strony).\documentclass[twoside]{article}
działa również.Oto kod z PyPDF2 i python3
źródło