Grafikbearbeitung mit dem Kommandozeilenwerkzeug ImageMagick

In diesem Beitrag beschreibe ich, wie man mit dem Kommandozeilenwerkzeug ImageMagick die Grafiken einer alten PDF-Datei ansehnlicher gestaltet. Dabei kommen auch weitere Werkzeuge zum Einsatz, so z.B. ein Programm zu aufsplitten der PDF-Datei und auch Batch-Programme auf Kommandozeilenebene werden ausgiebig genutzt.

Zur Problemstellung - Die Aufgabe

Ich habe vor ein paar Tagen eine alte PDF-Datei gefunden, die ich wieder verwenden wollte. Es handelte sich um die gescannte Version eines Lehrbuches. Allerdings hatte diese Datei eine schlechte Qualität:

  • die Scans an sich waren schlecht
  • auf einer A4-Seite der PDF-Datei waren immer zwei Buchseiten zusammengefasst. Das schränkte die frei Wahlmöglichkeit beim Ausdrucken ein. Die Ausdrucke waren wegen der kleinen Schrift schlecht lesbar
  • die Datei war unverhältnismäßig groß

Da die einzelnen Scans nicht mehr vorhanden waren und das Buch selbst auch nicht, wollte ich

  1. die einzelnen Seiten der Datei in bearbeitbare Grafiken umwandeln
  2. die Doppelseiten auseinanderschneiden
  3. die Grafiken selbst verbessern

Das Ganze sollte angesichts des Umfangs von 132 A4-PDF-Seiten bzw. 264 Buchseiten möglichst effektiv vonstatten gehen.

PDF-Datei zerlegen

Der erste Schritt bestand darin, die PDF-Datei zu zerlegen. Meine Versuche mit diversen Online-Konvertern oder Libre Office (bzw. Open Office) schlugen jedoch fehl. Microsoft Office kann eigentlich ab Version 2013 PDF-Dateien öffnen, allerdings arbeite ich immer noch mit der sonst vollkommen ausreichenden Version von 2007, die kann aber nur PDF-Dateien erstellen/speichern.

Erfolg hatte ich schließlich mit dem Programm PDF-XChangeEditor. Konkret habe ich die Version 9.5 genommen. Bei diesem Programm sind zwar in der kostenlosen Version viele Funktionen gesperrt oder anderweitig unbrauchbar gemacht, so auch der Export nach Excel, Word und Powerpoint. Der Export in eine Bilddatei funktioniert jedoch.

PDF-XChangeEditor erstellt dann beispielsweise aus einer PDF-Datei mein-dokument.pdf mit 10 Seiten 10 fortlaufende Grafikdateien mit mein-dokument_01.png. Man kann neben PNG auch andere Grafikformate wählen, z.B. TIFF oder JPEG.

Grafiken zerschneiden

Im Grund wäre es kein Problem, die nun vorliegenden Grafiken mit einem beliebigen Grafikprogramm wie z.B. Paint.Net in jeweils zwei Hälften zu zerschneiden. Wie ich jedoch schon erwähnt habe gibt es jedoch ein Mengenproblem. Ich hatte einfach keine Lust, 312 Grafikdateien aufzurufen und dann jeweils zuerst die linke und dann die rechte Hälfte separat zu speichern.

Also habe ich mit die Möglichkeiten von ImageMagick angesehen.

Grafiken verbessern

Batch-Dateien nutzen

Angenommen, es befinden sich im Verzeichnis E:\Test\ eine große Anzahl von Dateien, von denen man Kopien erstellen will, wobei bei den Dateikopien jeweils der Zusatz -neu an den bisherigen Dateinamen angehängt werden soll, also soll z.B. 12345.jpg zu 12345-neu.jpg kopiert werden, dann kann man die in einem Durchgang mit dieser kleinen Batch-Datei erledigen:

:: Achtung, nicht 2x auführen sonst ensteht -neu-neu
for %%f in ("E:\Test\*.*") do copy %%f %%~dpnf-neu%%~xf

Doch Vorsicht:Wenn man die Datei zwei mal ausführt, dann wird wiederum der neue Text an den Dateinamen angefügt! Wenn man diesen Arbeitsschritt nicht mit Hilfe einer Batch-Datei, sondern direkt in der Console ausführen will, dann sieht der Code etwas anders aus:

for %f in ("E:\Test\*.*") do copy %f %~dpnf-neu%~xf

Aus den doppelten Prozentzeichen wird jeweils ein einfaches Prozentzeichen. Wenn beim Kopieren unter anderem Namen eine Datei entsteht, deren Name bereits vorhanden ist, dann erfolgt hier eine Abfrage, ob die bisherige Datei überschrieben werden soll.

Man könnte nun auf die Idee kommen, dieses Script bzw. diesen Einzeiler nicht zum Kopieren sondern zum umbenennen zu benutzen, in dem man an Stelle von copy der Befehl ren bzw. rename verwendet. Doch das geht so nicht, denn bei rename ist beim Ziel keine Angabe von Laufwerk und Pfad erlaubt, aber im obigen Programmcode stehen unter dpnf die Parameter d für das Laufwerk, p für den Verzeichnispfad zur Datei und n für den Namen. Wenn man die beiden erstgenannten entfernt, dann klappt es auch mit dem Umbenennen.

for %f in ("E:\Test\*.*") do ren %f %~nf-neu%~xf

 

Auch hier gilt: nicht zwei Mal ausführen!