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