PDF Dateien mit Fußzeilen und Seitenzahlen nachrüsten
Für ein Dokumentationsprojekt stehe ich vor der Aufgabe das ich ein großes Dokument aus verschiedenen kleineren pdf Dateien zusammenfügen muss. Das wäre ja einfach. Damit das ganze aber nicht wie eine Aneinanderreihung von Bruchstücken wird sollen durchgehende Seitennummern vergeben werden. Das i-Tüpfelchen ist die Anforderung das es Quer- und Hochformatdokumente gibt. Und da das ganze ein fortlaufendes Projekt ist müssen immer wieder Zwischenberichte erstellt werden. Es lohnt sich also das zu automatisieren.
Hier habe ich eine Anregung gefunden wie das ganze funktionieren könnte.
Der Ablauf ist dann
- Berechne die Anzahl der Seiten aller Dokumente
- Erstelle für jedes Dokument ein “Overlay Dokument” in PDF Form das “auf die Zieldokumente gelegt wird” und die richtige Seitenanzahl mit den gewünschten Fußzeilen und Seitenzahlen hat
- teile die Ziel- und Nummerndokument auf in die einzelnen Seiten
- Füge die Seiten mit den Overlayseiten zusammen.
- Kombiniere die Seiten der Einzeldokumente wieder in ein Dokument zusammen
- Kombiniere alle jetzt durchnummerierten Dokumente zu dem gewünschten Gesamtdokument.
Hier das Script (Ja man kann noch mehr in Funktionen zerlegen aber das brauche ich (noch) nicht)
#!/bin/bash
function add_numbers {
# Parameter: filename start_page_number amount_of_pages landscape/portrait
mkdir -p temp
# Tausche im Nummerntemplate die Platzhalter gegen die gewünschten Seitenzahlen aus
more numbers-$4.tex | sed "s/number_to_start_with/$2/" | sed "s/number_of_pages/$3/" > temp/numbers.tex
# zerlege das Quelldokument
pdftk $1.pdf burst output temp/$1_%03d.pdf
cd temp
# Erstelle aus dem Template die Seiten mit den Seitenzahlen
pdflatex numbers.tex
# Zerlege das Seitenzahlendokument
pdftk numbers.pdf burst output numbers_%03d.pdf
# füge die einzelnen Zieldokumente mit den Seitenzahlendokumenten zusammen
for i in $(seq -f %03g 1 $3) ; do pdftk $1_$i.pdf stamp numbers_$i.pdf output new_$1_$i.pdf ; done
# alles zusammenstellen
pdftk new_$1_???.pdf output ../n_$1.pdf
# aufräumen
rm new_*.pdf
rm numbers*
rm doc_data.txt
rm $1_???.pdf
cd ..
}
doc_1=index
doc_2=anhang-1
doc_3=Anhang-2-Modellierung
doc_4=anhang-3
# Berechne die Seitenzahlen der Einzeldokumente
doc_1_pages=$(pdfinfo $doc_1.pdf | grep "Pages" | cut -c 8- | sed "s/ *//")
doc_2_pages=$(pdfinfo $doc_2.pdf | grep "Pages" | cut -c 8- | sed "s/ *//")
doc_3_pages=$(pdfinfo $doc_3.pdf | grep "Pages" | cut -c 8- | sed "s/ *//")
doc_4_pages=$(pdfinfo $doc_4.pdf | grep "Pages" | cut -c 8- | sed "s/ *//")
# Berechne die Startseiten für die Einzeldokumente
# Titelblatt und Index werden im ersten Dokument nicht mitgezählt
doc_2_start=$((${doc_1_pages} - 2 + 1 ))
doc_3_start=$((${doc_2_start} + ${doc_2_pages}))
doc_4_start=$((${doc_3_start} + ${doc_3_pages}))
# Für jedes Dokument ein Overlaydokument erstellen
add_numbers $doc_2 $doc_2_start $doc_2_pages landscape
add_numbers $doc_3 $doc_3_start $doc_3_pages portrait
add_numbers $doc_4 $doc_4_start $doc_4_pages portrait
# Alles zusammenpacken
pdftk $doc_1.pdf n_$doc_2.pdf n_$doc_3.pdf n_$doc_4.pdf cat output $(date +"%Y%m%d")-it-siko-v.pdf
rm n_*.pdf
Die Templates sehen so aus
numbers-landscape.text
\documentclass[10pt, a4paper,twoside, landscape]{article}
\usepackage{multido}
\usepackage[hmargin=.8cm,vmargin=1.5cm,nohead,nofoot]{geometry}
\usepackage{fancyhdr}
\setcounter{page}{number_to_start_with}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[RE,LO]{\fontfamily{phv}\selectfont Verinice Reporting Dokument}
\fancyfoot[LE,RO]{\fontfamily{phv}\selectfont Seite \thepage}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{1pt}
\begin{document}
\multido{}{number_of_pages}{\vphantom{x}\newpage}
\end{document}
\maketitle
numbers-portrait.tex
\documentclass[10pt, a4paper,twoside]{article}
\usepackage{multido}
\usepackage[hmargin=.8cm,vmargin=1.5cm,nohead,nofoot]{geometry}
\usepackage{fancyhdr}
\setcounter{page}{number_to_start_with}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[RE,LO]{\fontfamily{phv}\selectfont Verinice Reporting Dokument}
\fancyfoot[LE,RO]{\fontfamily{phv}\selectfont Seite \thepage}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{1pt}
\begin{document}
\multido{}{number_of_pages}{\vphantom{x}\newpage}
\end{document}
\maketitle