Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

PDF-Dateien zusammenführen mit PDFTK

Frage Entwicklung Batch & Shell

Mitglied: sharki

sharki (Level 1) - Jetzt verbinden

22.08.2008, aktualisiert 18:00 Uhr, 7605 Aufrufe, 10 Kommentare

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
Mitglied: bastla
22.08.2008 um 12:22 Uhr
Hallo sharki und willkommen im Forum!

Unter Verwendung des Trennzeichens "_" (in Deinem Beispiel hattest Du "-", im Batch "_") könnte das so gehen:
01.
@echo off & setlocal 
02.
set "Base=C:\Local_Reports_C8\Quartalreports" 
03.
set "PDFTK=C:\Tools\pdftk.exe" 
04.
set "PDF1=Report_Teil1" 
05.
set "PDF2=Report_Teil2" 
06.
set "PDF3=Report_Teil3" 
07.
set "PDFGes=Report_Gesamt" 
08.
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i" 
09.
goto :eof 
10.
 
11.
:ProcessCust 
12.
pushd "%~f1" 
13.
for %%r in ("%PDF1%_*.pdf") do call :ProcessRep "%%r" 
14.
popd 
15.
goto :eof 
16.
 
17.
:ProcessRep 
18.
for /f "tokens=2* delims=_" %%a in ("%~nx1") do set "Suffix=%%b" 
19.
if not exist "%PDF2%_%Suffix%" goto :eof 
20.
if not exist "%PDF3%_%Suffix%" goto :eof 
21.
echo "%PDFTK%" %PDF1%_%Suffix% %PDF2%_%Suffix% %PDF3%_%Suffix% cat output "%PDFGes%_%Suffix%" dont_ask 
22.
goto :eof 
23.
 
Grüße
bastla
Bitte warten ..
Mitglied: sharki
22.08.2008 um 12:51 Uhr
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
Bitte warten ..
Mitglied: bastla
22.08.2008 um 13:13 Uhr
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):
01.
"%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 )
01.
for %%r in ("%PDF1%-*.pdf") do call :ProcessRep "%%r"
als Trennzeichen "-" und nicht "_" verwendet hast ...
[/Edit]
[Edit2] Auch in der Zeile
01.
for /f "tokens=2* delims=-" %%a in ("%~nx1") do set "Suffix=%%b"
ist es ein "-", während Du in
01.
echo "%PDFTK%" %PDF1%_%Suffix% %PDF2%_%Suffix% cat output "%PDFGes%_%Suffix%" dont_ask
wieder "_" verwendest.
[/Edit2]

Grüße
bastla
Bitte warten ..
Mitglied: sharki
22.08.2008 um 13:53 Uhr
Hallo bastla,

ich habe festgestellt, das es wohl an der Zeile:

01.
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i" 
02.
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

Gruß,

sharki
Bitte warten ..
Mitglied: bastla
22.08.2008 um 14:05 Uhr
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
Bitte warten ..
Mitglied: sharki
22.08.2008 um 14:18 Uhr
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:

01.
@echo off & setlocal 
02.
set "Base=C:\Test" 
03.
set "PDFTK=C:\Tools\pdftk.exe" 
04.
set "PDF1=Quartalsbericht v2.16_Teil1-de" 
05.
set "PDF2=Quartalsbericht v2.16_Teil2-de" 
06.
 
07.
set "PDFGes=Report_Gesamt" 
08.
echo %PDF1% 
09.
pause 
10.
echo mit: "%Base%\*.pdf" ohne: %Base%\*.pdf 
11.
for %%i in ("%Base%\*.pdf") do call :ProcessRep "%%i" 
12.
echo 1 
13.
pause 
14.
goto :eof 
15.
 
16.
 
17.
:ProcessRep 
18.
for /f "tokens=2* delims=-" %%a in ("%~nx1") do set "Suffix=%%b" 
19.
rem if not exist "%PDF2%-%Suffix%" goto :eof 
20.
echo 4 
21.
pause 
22.
"%PDFTK%" "%PDF1%-%Suffix%" "%PDF2%-%Suffix%" cat output "%PDFGes%_%Suffix%" dont_ask 
23.
 
24.
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
Bitte warten ..
Mitglied: bastla
22.08.2008 um 14:36 Uhr
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
Bitte warten ..
Mitglied: bastla
22.08.2008 um 14:47 Uhr
Gelöschter Doppelpost
Bitte warten ..
Mitglied: sharki
22.08.2008 um 14:55 Uhr
Hi bastla,

Ich habe deshalb mal den Code verändert:

01.
@echo off & setlocal 
02.
set "Base=C:\Test" 
03.
set "PDFTK=C:\Tools\pdftk.exe" 
04.
set "PDF1=Quartalsbericht v2.16_Teil1-de" 
05.
set "PDF2=Quartalsbericht v2.16_Teil2-de" 
06.
 
07.
set "PDFGes=Report_Gesamt" 
08.
echo %PDF1% 
09.
pause 
10.
echo mit: "%Base%\*.pdf" ohne: %Base%\*.pdf 
11.
for %%i in ("%Base%\*.pdf") do call :ProcessRep "%%i" 
12.
echo 1 
13.
pause 
14.
goto :eof 
15.
 
16.
 
17.
:ProcessRep 
18.
for /f "tokens=2* delims=-" %%a in ("%~nx1") do set "Suffix=%%b" 
19.
rem if not exist "%PDF2%-%Suffix%" goto :eof 
20.
echo 4 
21.
pause 
22.
"%PDFTK%" "%PDF1%-%Suffix%" "%PDF2%-%Suffix%" cat output "%PDFGes%-%Suffix%" dont_ask 
23.
 
24.
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
Bitte warten ..
Mitglied: bastla
22.08.2008 um 17:59 Uhr
Hallo sharki!

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

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Dateien zusammenführen inkl. finden von doppelten Einträgen (3)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Drucker und Scanner
Problem mit Ausdruck von PDF Dateien (4)

Frage von CountryBoy zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...