ubuntuusers.de

PDF zusammenfügen

Status: Gelöst | Ubuntu-Version: Kubuntu 12.04 (Precise Pangolin)
Antworten |

SR166

Anmeldungsdatum:
9. November 2009

Beiträge: 35

Hallo,

ich verwende Windows in Virtualbox, weil mein Rechnungsprogramm nicht unter wine läuft. Wenn ich eine Rechnung drucke, drucke ich einmal die Rechnung und einmal das Aufmass. Das geht leider nicht anders zu lösen. Die Dateien heissen dann zBsp. 6201.pdf und 6201-auf.pdf.

Wie könnte ich nun per script die PDF-Dateien zusammenfügen?

Also ich hab den Ordner mit den ganzen Dateien und möchte nun dass die jeweiligen zwei Dateien, die zusammengehören (Nummern) zusammengefügt werden. 6201.pdf und 6201-auf.pdf 6202.pfd und 6202-auf.pd

Danke im Voraus

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

pdfsam ist ein Java-Tool, welches das mittels GUI kann. Iirc setzt es aber auf die pdftools auf; danach würde ich mal suchen.

SR166

(Themenstarter)

Anmeldungsdatum:
9. November 2009

Beiträge: 35

Mit pdfsam kann ich aber leider nur händisch zusammenfügen. Ich dachte evtl. dass man die Dateien per script ordnet und die beiden zugehörigen dann zusammengefügt werden. Ich hab mittlerweile über 120 Dateien, das ist ein ganz schöner Aufwand.

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

SR166 schrieb:

Mit pdfsam kann ich aber leider nur händisch zusammenfügen.

Ja... daher schrieb ich ja auch, dass das wohl auf einer Lib basiert, die eben auch CLI basierte Tools bietet. Ich habe gerade innerhalb einer Minute in der FAQ von pdfsam herausgefunden, dass es das Tool pdfsam-console gibt, welches einem genau dieses CLI Interface bietet. Man sollte also Beiträge mal genau lesen 😉

SR166

(Themenstarter)

Anmeldungsdatum:
9. November 2009

Beiträge: 35

Hab Dich schon verstanden 👍 aber mir gehts hauptsächlich ums sortieren, zusammenfügen könnte ich auch mit pdftk. Ich dachte eher an sort oder grep. Bin da nicht so sehr bewandert.

So sieht der Ordner zum Beispiel aus:

rw-rw-rw- 1 1001 burning   10021 Sep  4  2011 6192-auf.pdf
-rw-rw-rw- 1 1001 burning   32920 Sep  4  2011 6192.pdf
-rw-rw-rw- 1 1001 burning    7661 Sep  4  2011 6193-auf.pdf
-rw-rw-rw- 1 1001 burning   29841 Sep  4  2011 6193.pdf
-rw-rw-rw- 1 1001 burning    4605 Sep  4  2011 6194-auf.pdf
-rw-rw-rw- 1 1001 burning   32610 Sep  4  2011 6194.pdf
-rw-rw-rw- 1 1001 burning    7131 Sep  8  2011 6195-auf.pdf
-rw-rw-rw- 1 1001 burning   32830 Sep  8  2011 6195.pdf
-rw-rw-rw- 1 1001 burning   13923 Sep 28  2011 6196-auf.pdf
-rw-rw-rw- 1 1001 burning   32420 Sep 28  2011 6196.pdf
-rw-rw-rw- 1 1001 burning   14165 Okt 25  2011 6197-auf.pdf
-rw-rw-rw- 1 1001 burning   33335 Okt 25  2011 6197.pdf
-rw-rw-rw- 1 1001 burning   29644 Okt 28  2011 6198-ang.pdf
-rw-rw-rw- 1 1001 burning   18738 Okt 28  2011 6198-auf.pdf
-rw-rw-rw- 1 1001 burning   32934 Okt 28  2011 6198.pdf

Aber wie krieg ich pdftk dazu, die passenden Dateien rauszusuchen? 😢

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Das wird eine einfache for Schleife, die mittels File Globbing die Rechnungsdateien aufspürt und dann abarbeitet:

for f in *[0-9].pdf ; do 
    echo "Rechnung:     $f"                    # Natürlich wirst Du hier was mit pdftk machen ...
    echo "Aufriss dazu: ${f%.pdf}-auf.pdf"
done

Erklärungen dazu findest Du im Bash Manual und in Greg's Wiki .

LG,

track

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Testdaten erzeugen:

1
2
touch {196..205}.txt 
touch {198..207}-auf.txt  

Test:

1
for n in {196..207}; do if [[ -e $n.txt && -e $n-auf.txt ]]; then cat $n.txt $n-auf.txt > $n-merge.txt ; fi ; done 

Test ob es skaliert:

1
for n in {1..200000}; do if [[ -e $n.txt && -e $n-auf.txt ]]; then cat $n.txt $n-auf.txt > $n-merge.txt ; fi ; done 

In wenigen Sekunden erledigt.

SR166

(Themenstarter)

Anmeldungsdatum:
9. November 2009

Beiträge: 35

Super hat geklappt. Danke für Eure Hilfe, hab es so gelöst:

1
2
3
4
5
6
7
8
#!/bin/bash

for f in *[0-9].pdf ; do
  if [[ -e $f && -e ${f%.pdf}-aufm.pdf ]];                 
  then
  pdftk $f ${f%.pdf}-aufm.pdf output $f-komplett.pdf
  fi;
done

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

In Zeile 4 bräuchtest Du eigentlich die 1. Abfrage nach der Existenz von $f nicht, denn immerhin hat das Globbing Dir diesen Dateinamen geliefert, weil er existiert. (der einzige Grund für diese Abfrage wäre der Fall, dass es überhaupt keine *[0-9].pdf-Datei im Verzeichnis gibt !)

Viel wichtiger ist allerdings ein Fehler, den auch user unknown als alter Hase immer wieder macht: Du "quotest" nicht sauber !!

In Deinem Fall, wo keine Leerzeichen im Dateinamen vorkommen, mag das mal gut gehen.
Aber sobald mal eine Datei mit Leer- oder seltsamen Zeichen vorkommt, kann es übel schief gehen !

Deshalb bitte unbedingt so:

#!/bin/bash

for f in *[0-9].pdf ; do
    if [[ -e $f && -e ${f%.pdf}-aufm.pdf ]];  then
        pdftk "$f" "${f%.pdf}-aufm.pdf" output "$f-komplett.pdf"
    fi;
done

(Der Globbing-Stern darf nicht, und der Inhalt der [[ ... ]] braucht nicht "gequotet" werden, der Rest muss aber !)
n.b.: Dein Ziel-Name ist lustig ! - da steht gleich 2 mal ".pdf" drin, weil Du dort keine Parameter Expansion verwendest !

LG,

track

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Wenn das Dateinamensmuster als 6194-auf.pdf vorgegeben ist brauch ich nicht quoten. Wenn da ein Blank drin wäre würde es nicht mehr auf's beschriebene Muster passen und würde übersprungen werden sollen.

Außerdem teste ich ja auch ohne Quoting auf Existenz der Dateien.

SR166

(Themenstarter)

Anmeldungsdatum:
9. November 2009

Beiträge: 35

track

Danke hab es geändert. Aber noch zwei Fragen. Erstens wie bekomm ich das pdf aus dem zielnamen, und zweitens ich hab auch ein paar Dateien, dir nicht mit -auf.pdf sondern -aufm.pdf enden. Kriegst Du das auch noch geregelt? 👍

edit Zieldatei hab ich hinbekommen

1
output "${f%.*}-komplett.pdf"

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Sie Endung wegzulöschen hatte ich Dir oben doch schon vorgemacht ...!?

Die Parameter Expansion brauchst Du doch nur abzuschreiben:

"${f%.pdf}-komplett.pdf"

(Guckst Du Dir denn nicht genauer an, was ich da gemacht habe, und die Links ??)

Wenn es wahlweise eine *-auf.pdf - oder eine *-aufm.pdf - Datei geben kann, dann könntest Du
- entweder die Abfrage, ob die Datei existiert, jeweils für jeden der beiden Fälle (also 2x) anlegen,
- oder Du drehst die Dateierkennung um, und suchst nach *[0-9]-auf.pdf und *[0-9]-aufm.pdf
   Dann musst Du natürlich die Parameter Expansions entsprechend anpassen.
Falls es beide Varianten zu einer Rechnung gibt, bekommst Du nur von der 2. Variante eine Zusammenfassung. (je nachdem)

track

Antworten |