sharki
Goto Top

PDF-Dateien zusammenführen mit PDFTK

Die Fragestellung an sich läßt noch nicht auf das eigentliche Problem schliessen. Es handelt sich hierbei um PDF's in Einzelteilen, die als Gesamtdokument erstellt werden sollen. Allerdings muß die Struktur in der Benennung der PDF's erhalten bleiben.

Hallo,

ich gehe davon aus, dass ihr mit meinen bisherigen Ausführungen noch keine Lösung haben werdet.
Was ich suche ist eine Script, dass mir mit PDFTK Dateien Zusammenführt.

Die Struktur der Dateien lautet: Titel-Teily-xxx.pdf

Titel = Der Name der Datei (nennen wir sie Report, dieser bleibt immer gleich)
Teily = Der Teil der gesplitteten PDF-Datei. z.B. Report-Teil1-xxx.pdf, Report-Teil2-xxx.pdf, Report-Teil3-xxx.pdf
xxx = Der Name eines Kunden.

Somit hat dann die Struktur meiner PDF-Dateien in einem Ordner folgendes Aussehen:

Report-Teil1-Heinz.pdf
Report-Teil2-Heinz.pdf
Report-Teil3-Heinz.pdf
Report-Teil1-Walter.pdf
Report-Teil2-Walter.pdf
Report-Teil3-Walter.pdf
...

(Es sind über 200 mal Teil 1-3 vorhanden).

Daraus möchte ich nun folgendes machen.

Report-Gesamt-Heinz.pdf
Report-Gesamt-Walter.pdf
...

Wohin die Ausgabe erfolgt ist erstmal egal. Sie kann in das selbe Verzeichnis erfogen.
Die eigentliche Herausforderung ist denke ich das Herausfinden von Teil 1-3 und dem dazugehörigen Namen.

Ich habe schon mal so was probiert (gefunden im Forum):

@echo off & setlocal
set "Base=C:\Local_Reports_C8\Quartalreports"
set "PDFTK=C:\Tools\pdftk.exe"
set "PDF1=Report-Teil1-?????????????????????????????????????????????????????????????"
set "PDF2=Report-Teil2-?????????????????????????????????????????????????????????????"
set "PDFGes=Report_Gesamt"
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i"
goto :eof
:ProcessCust
pushd "%~f1"
if not exist "%PDF1%_*.pdf" goto :EndSub
for /f "tokens=2* delims=_" %%a in ('dir /b "%PDF1%_*.pdf"') do set "Suffix=%%b"
"%PDFTK%" %PDF1%_%Suffix% %PDF2%_%Suffix% %PDF3%_%Suffix% cat output "%PDFGes%_%Suffix%" dont_ask

:EndSub
popd

Es funktioniert aber nicht und ist sicher auch nicht die gewünschte Lösung.

Kann mir jemand Unterstützung geben?

Vielen Dank für eure Mühe,

sharki

Content-Key: 95093

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

Printed on: April 26, 2024 at 21:04 o'clock

Member: bastla
bastla Aug 22, 2008 at 10:22:48 (UTC)
Goto Top
Hallo sharki und willkommen im Forum!

Unter Verwendung des Trennzeichens "_" (in Deinem Beispiel hattest Du "-", im Batch "_") könnte das so gehen:
@echo off & setlocal
set "Base=C:\Local_Reports_C8\Quartalreports"  
set "PDFTK=C:\Tools\pdftk.exe"  
set "PDF1=Report_Teil1"  
set "PDF2=Report_Teil2"  
set "PDF3=Report_Teil3"  
set "PDFGes=Report_Gesamt"  
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i"  
goto :eof

:ProcessCust
pushd "%~f1"  
for %%r in ("%PDF1%_*.pdf") do call :ProcessRep "%%r"  
popd
goto :eof

:ProcessRep
for /f "tokens=2* delims=_" %%a in ("%~nx1") do set "Suffix=%%b"  
if not exist "%PDF2%_%Suffix%" goto :eof  
if not exist "%PDF3%_%Suffix%" goto :eof  
echo "%PDFTK%" %PDF1%_%Suffix% %PDF2%_%Suffix% %PDF3%_%Suffix% cat output "%PDFGes%_%Suffix%" dont_ask  
goto :eof
Grüße
bastla
Member: sharki
sharki Aug 22, 2008 at 10:51:45 (UTC)
Goto Top
Hallo bastla,

danke für die schnelle Antowrt. Allerings habe ich da noch ein paar Schwierigkeiten.

Die Batch scheint immer aus dem Programm zu springen. Ich poste mal meinen Code:

@echo off & setlocal
set "Base=C:\Local_Reports_C8\Quartalreports"
set "PDFTK=C:\Tools\pdftk.exe"
set "PDF1=Report v2.16_Teil1-de"
set "PDF2=Report v2.16_Teil2-de"

set "PDFGes=Report_Gesamt"
echo %PDF1%
pause
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i"
goto :eof

:ProcessCust
pushd "%~f1"
for %%r in ("%PDF1%-*.pdf") do call :ProcessRep "%%r"
popd
goto :eof

:ProcessRep
for /f "tokens=2* delims=-" %%a in ("%~nx1") do set "Suffix=%%b"
if not exist "%PDF2%_%Suffix%" goto :eof

echo "%PDFTK%" %PDF1%_%Suffix% %PDF2%_%Suffix% cat output "%PDFGes%_%Suffix%" dont_ask
goto :eof


Kann es sein, dass die Namen meiner Dateien das Problem sind?

Dank,

sharki
Member: bastla
bastla Aug 22, 2008 at 11:13:40 (UTC)
Goto Top
Hallo sharki!

Da hatte ich mich ein wenig auf Deine Zeile für den "pdftk"-Aufruf verlassen und auf die (ansonsten schon gewohnheitsmäßig gesetzten) Anführungszeichen verzichtet ...

So sollte es besser sein (dann ist auch das - vorhin gar nicht erwähnte - "echo" zum Testen der Zeile weg):
"%PDFTK%" "%PDF1%_%Suffix%" "%PDF2%_%Suffix%" "%PDF3%_%Suffix%" cat output "%PDFGes%_%Suffix%" dont_ask  
[Edit] Außerdem fällt mir auf, dass Du in der Zeile (hättest Du mit < code>-Tags gepostet, könnte ich hier die Zeilennummer angeben face-wink)
for %%r in ("%PDF1%-*.pdf") do call :ProcessRep "%%r"  
als Trennzeichen "-" und nicht "_" verwendet hast ...
[/Edit]
[Edit2] Auch in der Zeile
for /f "tokens=2* delims=-" %%a in ("%~nx1") do set "Suffix=%%b"  
ist es ein "-", während Du in
echo "%PDFTK%" %PDF1%_%Suffix% %PDF2%_%Suffix% cat output "%PDFGes%_%Suffix%" dont_ask  
wieder "_" verwendest.
[/Edit2]

Grüße
bastla
Member: sharki
sharki Aug 22, 2008 at 11:53:31 (UTC)
Goto Top
Hallo bastla,

ich habe festgestellt, das es wohl an der Zeile:

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

liegt. (*lernfähig*)

Hier springt die batch nicht in ProzessCust sondern macht goto :eof

Ich habe mir mal PDF1 und PDF2 anzeigen lassen und auch Base. Sieht alles ok aus. Dateien sind auch im Verzeichnis face-wink

Gruß,

sharki
Member: bastla
bastla Aug 22, 2008 at 12:05:07 (UTC)
Goto Top
Hallo sharki!

"for /d" bezieht sich ja auf Verzeichnisse, nicht auf Dateien - demnach sieht es so aus, als ob es in %Base% keine Unterverzeichnisse gäbe ...

Grüße
bastla
Member: sharki
sharki Aug 22, 2008 at 12:18:58 (UTC)
Goto Top
Hi bastla,

deine Aussage stimmt soweit. Es gibt ein Verzeichnis und in dessen root liegen die PDF's.
Bzw. die Ausgabe von Base sieht konkret so aus: C:\Test\

Ich habe deshalb mal den Code verändert:

@echo off & setlocal
set "Base=C:\Test"  
set "PDFTK=C:\Tools\pdftk.exe"  
set "PDF1=Quartalsbericht v2.16_Teil1-de"  
set "PDF2=Quartalsbericht v2.16_Teil2-de"  

set "PDFGes=Report_Gesamt"  
echo %PDF1%
pause
echo mit: "%Base%\*.pdf" ohne: %Base%\*.pdf  
for %%i in ("%Base%\*.pdf") do call :ProcessRep "%%i"  
echo 1
pause
goto :eof


:ProcessRep
for /f "tokens=2* delims=-" %%a in ("%~nx1") do set "Suffix=%%b"  
rem if not exist "%PDF2%-%Suffix%" goto :eof  
echo 4
pause
"%PDFTK%" "%PDF1%-%Suffix%" "%PDF2%-%Suffix%" cat output "%PDFGes%_%Suffix%" dont_ask  

goto :eof

Ich bekomme jetzt zwar noch Fehler "Faild to open PDF File" aber die Variablen sehen gut aus und der richtige Name steht auch drin!
Ich denke ich bin kurz vor der Lösung!

Vielen Dank bis dato... Das war echt ne riesen Hilfe!

Ich denke mal, dass das Problem mit dem öffnen nicht deine Baustelle ist?

Gruß,

sharki
Member: bastla
bastla Aug 22, 2008 at 12:36:24 (UTC)
Goto Top
Hallo sharki!

Die "for /d"-Zeile dient dazu, jedes Verzeichnis unterhalb von %Base% (also damit also jedes unmittelbare Unterverzeichnis von "C:\Test\") zu bearbeiten - mit "pushd" wird dann in dieses Verzeichnis gewechselt und darin nach .pdf-Dateien gesucht.

Grüße
bastla
Member: bastla
bastla Aug 22, 2008 at 12:47:44 (UTC)
Goto Top
Gelöschter Doppelpost
Member: sharki
sharki Aug 22, 2008 at 12:55:09 (UTC)
Goto Top
Hi bastla,

Ich habe deshalb mal den Code verändert:

@echo off & setlocal
set "Base=C:\Test"  
set "PDFTK=C:\Tools\pdftk.exe"  
set "PDF1=Quartalsbericht v2.16_Teil1-de"  
set "PDF2=Quartalsbericht v2.16_Teil2-de"  

set "PDFGes=Report_Gesamt"  
echo %PDF1%
pause
echo mit: "%Base%\*.pdf" ohne: %Base%\*.pdf  
for %%i in ("%Base%\*.pdf") do call :ProcessRep "%%i"  
echo 1
pause
goto :eof


:ProcessRep
for /f "tokens=2* delims=-" %%a in ("%~nx1") do set "Suffix=%%b"  
rem if not exist "%PDF2%-%Suffix%" goto :eof  
echo 4
pause
"%PDFTK%" "%PDF1%-%Suffix%" "%PDF2%-%Suffix%" cat output "%PDFGes%-%Suffix%" dont_ask  

goto :eof

Ich bekomme jetzt zwar noch Fehler "Faild to open PDF File" aber die Variablen sehen gut aus und der richtige Name steht auch drin!
Ich denke ich bin kurz vor der Lösung!

Vielen Dank bis dato... Das war echt ne riesen Hilfe!

Ich denke mal, dass das Problem mit dem öffnen nicht deine Baustelle ist?

Gruß,

sharki
Member: bastla
bastla Aug 22, 2008 at 15:59:59 (UTC)
Goto Top
Hallo sharki!

Da Du das "pushd" herausgenommen hast, fehlt Dir jetzt der Pfad ("%Base%") - daher entweder vor der Zeile 11
pushd "%Base%"  
und danach das "popd", oder konsequente Verwendung des Pfades in den Zeilen 19 und 22, also für letztere:
"%PDFTK%" "%Base%\%PDF1%-%Suffix%" "%Base%\%PDF2%-%Suffix%" cat output "%Base%\%PDFGes%-%Suffix%" dont_ask  

Grüße
bastla