godzilla13
Goto Top

PDF-Dateien in vielen Unterordnern mit PDFTK zusammenfügen und umbenennen (Windows)

Hallo Miteinander,

ich habe ein ähnliches Problem wie in diesem Thread, allerdings sind meine Anforderungen leicht anders und das OS ist Windows anstatt Unix/Linux.

Für unsere Druckerei müssen wir für jedes Gerät (Maschine) entsprechende Schaltplane abrufen. Das Programm über das wir dies machen legt für jedes Gerät einen Ordner an, benennt diesen nach der Gerätenummer und legt wiederum drei Unterordner mit den entsprechenden Schaltplänen an. Damit wir sämtliche Schaltpläne nun komfortabel an die Drucker bzw. auch an eine CD-Brennstation schicken können ist nun folgendes notwendig.

Hier mal die Ordnerstrukur:
8fc95ed1c0fc3e2f7f7fb5645c552177-bild_ordnerstruktur

Für jeden Unterordner (z.B. "Schaltplaene_Elektrik") werden sämtliche darin enthaltene PDF Dateien mit Acrobat zusammengeführt und wie folgt benannt: spl_Gerätenummer_Schaltplanart.pdf > spl_053649_Elektrik.pdf

Am Ende haben wir damit 3 PDF Dateien pro Gerät die wir dann weiter verarbeiten können.

Auch wenn Acrobat mit der Zusammenführung von PDF Dateien uns einiges an Arbeit abnimmt, es ist bei der Anzahl der Geräte und Schaltpläne dennoch eine zeitaufwendige Arbeit, die vielleicht über ein Batchprogramm in Kombination mit PDFTK oder einem anderen Tool erleichtert werden kann.

Wichtig sind noch folgende Dinge: Die Zusammenstellung innerhalb der Unterordner sollte anhand der Dateigröße erfolgen, Größte Datei zuerst. Außerdem wäre es hilfreich wenn die einzelnen Bookmarks in den PDF Dateien erhalten blieben. Ob das PDFTK überhaupt unterstützt konnte ich noch nicht rausfinden. Letzterer Punkt wäre aber zur Not vernachlässigbar.


Vielleicht hat jemand einen Rat oder die Zeit um mir bei diesem Problem zu helfen.

Gruß,
Godzilla13

Content-Key: 69672

Url: https://administrator.de/contentid/69672

Printed on: April 24, 2024 at 17:04 o'clock

Member: bastla
bastla Sep 27, 2007 at 18:31:03 (UTC)
Goto Top
Hallo Godzilla13 und willkommen im Forum!

Mit der folgenden Variation des Batch-Files aus dem anderen erwähnten Beitrag sollte das Zusammenfügen klappen:
@echo off & setlocal
set "root=C:\test"  
set "PDFTK=C:\Tools\pdftk.exe"  

for /d %%i in ("%root%\*.*") do call :ProcessMachine "%%i"  
goto :eof

:ProcessMachine
set "Machine=%~n1"  
for /d %%v in ("%~1\*.*") do call :ProcessPlanType "%%v"  
goto :eof

:ProcessPlanType
dir "%~1\*.pdf">nul 2>nul || goto :eof  
for /f "tokens=2 delims=_" %%t in ('echo %~n1') do set "PDFFile=%root%\%Machine%\spl_%Machine%_%%t.pdf"  
if exist "%PDFFile%" del "%PDFFile%"  
set "Temp1=%~1\Temp1.tmp"  
set "Temp2=%~1\Temp2.tmp"  
set First=True
for /f "delims=" %%d in ('dir %1 /b /o-s /a-d') do if not defined First (  
	"%PDFTK%" "%Temp1%" "%~1\%%d" cat output "%Temp2%"  
	move "%Temp2%" "%Temp1%"  
) else (	
	copy "%~1\%%d" "%Temp1%">nul  
	set First=
)
move "%Temp1%" "%PDFFile%"  
goto :eof

Grüße
bastla
Member: Godzilla13
Godzilla13 Oct 01, 2007 at 05:45:17 (UTC)
Goto Top
Hallo bastla,

vielen Dank! Funktioniert einwandfrei.

Weißt du ob es evtl. noch eine PDFTK Option gibt die die Bookmarks in den PDF Files beibehält?

Gruß,
Godzilla13
Member: bastla
bastla Oct 01, 2007 at 05:59:47 (UTC)
Goto Top
Hallo Godzilla13!

Weißt du ob es evtl. noch eine PDFTK Option gibt die die Bookmarks in den PDF Files beibehält?
Da muss ich leider passen ...

Grüße
bastla
Member: Godzilla13
Godzilla13 Oct 17, 2007 at 11:21:50 (UTC)
Goto Top
Hallo bastla,

vielleicht kannst du mir nochmals helfen. Die Praxis hat gezeigt das ich doch am besten mit einer Datei fahre. D.h. die drei durch dein Batch erstellten Dateien (spl_012345_Elektrik.pdf; spl_012345_Hydraulik.pdf; spl_012345_Pneumatik.pdf) sollten in einem zweiten Schritt zu einer Datei (spl_012345.pdf) zusammengeführt werden. Folgende Reihenfolge sollte dabei beachtet werden:

1) ...Elektrik.pdf
2) Leerseite.pdf
3) ...Hydraulik.pdf
4) Leerseite.pdf
5) ...Pneumatik
6) Leerseite.pdf

Die drei ursprünglichen PDF Dateien können im finalen Schritt dann gerne gelöscht werden, sodass nur noch eine PDF Datei übrig bleibt. Die Leerseite.pdf liegt ein einem anderen Verz., bräuchte also noch eine Pfadangabe.

Wäre wirklich super wenn du mir das nach der neuen Anforderung noch umschreiben könntest. Danke!
Member: bastla
bastla Oct 17, 2007 at 18:06:31 (UTC)
Goto Top
Hallo Godzilla13!

Wenn sicher ist, dass immer alle 3 Einzeldateien (_Elektrik.pdf, _Hydraulik.pdf, _Pneumatik.pdf) existieren, könntest Du es so versuchen:
@echo off & setlocal
set "root=C:\test"  
set "PDFTK=C:\Tools\pdftk.exe"  
set "Leer=C:\Anderes Verzeichnis\Leerseite.pdf"  

for /d %%i in ("%root%\*.*") do call :ProcessMachine "%%i"  
goto :eof

:ProcessMachine
set "Machine=%~n1"  
for /d %%v in ("%~1\*.*") do call :ProcessPlanType "%%v"  
pushd "%root%\%Machine%"  
set "M=spl_%Machine%"  
if exist "%M%.pdf" del "%M%.pdf"  
"%PDFTK%" "%M%_Elektrik.pdf" "%Leer%" "%M%_Hydraulik.pdf" "%Leer%" "%M%_Pneumatik.pdf" "%Leer%" cat output "%M%.pdf"  
del "%M%_*.pdf"  
popd
goto :eof

:ProcessPlanType
dir "%~1\*.pdf">nul 2>nul || goto :eof  
for /f "tokens=2 delims=_" %%t in ('echo %~n1') do set "PDFFile=%root%\%Machine%\spl_%Machine%_%%t.pdf"  
if exist "%PDFFile%" del "%PDFFile%"  
set "Temp1=%~1\Temp1.tmp"  
set "Temp2=%~1\Temp2.tmp"  
set First=True
for /f "delims=" %%d in ('dir %1 /b /o-s /a-d') do if not defined First (  
	"%PDFTK%" "%Temp1%" "%~1\%%d" cat output "%Temp2%"  
	move "%Temp2%" "%Temp1%"  
) else (	
	copy "%~1\%%d" "%Temp1%">nul  
	set First=
)
move "%Temp1%" "%PDFFile%"  
goto :eof
Da ich nur eine Ergänzung der ursprünglichen Lösung vorgenommen habe, werden alle Einzeldateien wieder neu erstellt, kombiniert und schließlich gelöscht.

Grüße
bastla
Member: bastla
bastla Oct 17, 2007 at 19:21:09 (UTC)
Goto Top
... Nachtrag: Als Absicherung gegen fehlende Einzeldateien könnte das Unterprogramm ":ProcessMachine" wie folgt geändert werden:
:ProcessMachine
set "Machine=%~n1"  
for /d %%v in ("%~1\*.*") do call :ProcessPlanType "%%v"  
pushd "%root%\%Machine%"  
set "M=spl_%Machine%"  
if exist "%M%.pdf" del "%M%.pdf"  
set Dateien=
if exist "%M%_Elektrik.pdf" set "Dateien="%M%_Elektrik.pdf" "%Leer%""  
if exist "%M%_Hydraulik.pdf" set "Dateien=%Dateien% "%M%_Hydraulik.pdf" "%Leer%""  
if exist "%M%_Pneumatik.pdf" set "Dateien=%Dateien% "%M%_Pneumatik.pdf" "%Leer%""  
"%PDFTK%" %Dateien% cat output "%M%.pdf"  
del "%M%_*.pdf"  
popd
goto :eof

Grüße
bastla

[Edit] Überzählige Anführungszeichen (siehe unten) entfernt. [/Edit]
[Edit2] Total überflüssige Zeile "%M%_Pneumatik.pdf" "%Leer%" cat output "%M%.pdf" entsorgt. [/Edit2]
Member: Godzilla13
Godzilla13 Oct 18, 2007 at 05:26:26 (UTC)
Goto Top
In deiner Ergänzung muss sich noch ein Fehler eingeschlichen haben. Er macht mir die Datei spl_xxx_Pneumatik.pdf auf beim BAT ausführen und bricht den BAT mit der Fehlermeldung ab:

Error: Failed to open PDF file:
spl_053649_Elektrik.pdf C:\SPL_tools\Leerblatt.pdf spl_053649_Hydraulik.pdf C
:\SPL_tools\Leerblatt.pdf spl_053649_Pneumatik.pdf C:\SPL_tools\Leerblatt.pdf
Errors encountered. No output created.
Done. Input errors, so no output created.
Member: bastla
bastla Oct 18, 2007 at 05:44:14 (UTC)
Goto Top
Hallo Godzilla13!

Da hatte ich's etwas zu gut mit den Anführungszeichen gemeint ...

In der Zeile
"%PDFTK%" "%Dateien%" cat output "%M%.pdf"  
darf die Variable %Dateien% nicht in Anführungszeichen eingeschlossen werden.

Ich ändere das auch gleich oben.

Grüße
bastla
Member: Godzilla13
Godzilla13 Oct 18, 2007 at 05:52:24 (UTC)
Goto Top
Ich hab das mal geändert, jetzt kommt zwar keine Fehlermeldung mehr aber er öffnet mir dennoch die spl_xxx_Pneumatik.pdf, und zwar von dem Gerät wo der Ordner Hydraulik fehlt. Das BAT bleibt offen stehen.
Member: Godzilla13
Godzilla13 Oct 18, 2007 at 06:03:24 (UTC)
Goto Top
Ergänzung: Wenn ich die geöffnete PDF Datei schließe, läuft das Script weiter, öffnet mir den nächsten Pneumatik Gesamtschaltplan und ist dann fertig, inkl. den richtigen Ausgabefiles.
Member: Godzilla13
Godzilla13 Oct 18, 2007 at 06:04:02 (UTC)
Goto Top
Kann es sein das die Zeile raus gehört?

"%M%_Pneumatik.pdf" "%Leer%" cat output "%M%.pdf"
Member: bastla
bastla Oct 18, 2007 at 06:04:25 (UTC)
Goto Top
Hallo Godzilla13!

Ich kann diesen Fehler mit meinen Testdaten nicht nachvollziehen.

Stell doch bitte die angezeigte Meldung herein.

Grüße
bastla
Member: Godzilla13
Godzilla13 Oct 18, 2007 at 06:09:09 (UTC)
Goto Top
Ich hab dir oben noch was rein editiert, wenn die Zeile im Script fehlt läuft es durch. Weiß nicht ob dafür an anderer Stelle was fehlt oder ob die Zeile wirklich raus gehört.
Member: bastla
bastla Oct 18, 2007 at 06:09:49 (UTC)
Goto Top
Kann es sein das die Zeile raus gehört?

> "%M%_Pneumatik.pdf" "%Leer%" cat output "%M%.pdf"


Ja - die hätte eigentlich nie reingehört (ist anscheinend vom Testen stehen geblieben).

Grüße
bastla
Member: bastla
bastla Oct 18, 2007 at 06:13:31 (UTC)
Goto Top
Hallo Godzilla13!

Du hast den Fehler richtig erkannt (und behoben). Die genannte Zeile ist total entbehrlich.

Grüße
bastla
Member: Godzilla13
Godzilla13 Oct 18, 2007 at 06:17:27 (UTC)
Goto Top
Vielen Dank für die wieder einmal super Unterstützung!