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, 7615 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Suche Batch-Programm zum Zusammenfügen zweier PDF-Dateien (3)

Frage von Sinzal zum Thema Batch & Shell ...

Batch & Shell
gelöst Zwei PDF-Dateien zusammen führen per Batch (3)

Frage von hongziehong zum Thema Batch & Shell ...

Microsoft
Office Dokumente und PDF-Dateien digital unterschreiben (3)

Frage von eazy-isi zum Thema Microsoft ...

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

Frage von miczar zum Thema Batch & Shell ...

Neue Wissensbeiträge
Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Windows Server

Exchange 2010 auf Windows Server 2016 und AD

(2)

Tipp von Herbrich19 zum Thema Windows Server ...

KVM

How to: Libvirt Port forwarding

(2)

Anleitung von fundave3 zum Thema KVM ...

Heiß diskutierte Inhalte
Router & Routing
über Vmware auf eine FritzBox mit IPv6 per VPN (17)

Frage von Zockervogel zum Thema Router & Routing ...

Windows Server
gelöst Netzlaufwerk RemoteApp auf Win 2012 R2 Terminalserver funktioniert nicht (12)

Frage von grenzde zum Thema Windows Server ...

Windows 7
Windows Client Anmeldung bei zwei identischen Domänen (11)

Frage von creeko zum Thema Windows 7 ...

Java
Mit welchem Browser ist noch Java möglich? (8)

Frage von maddoc zum Thema Java ...