Top-Themen

Aktuelle Themen (A bis Z)

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, 7648 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
Entwicklung
PDFs mit selben Namen zusammenführen
Frage von flackmannEntwicklung2 Kommentare

Hallo zusammen, ich habe ein "Problem" bzw. einen Arbeitsschritt den ich optimieren will. Kollege aus dem Back Office welcher ...

Batch & Shell
Automatische PDF Erstellung mit dem Programm PDFTK aus Dateien mit gleicher Anfangsbezeichnung im Dateinamen
gelöst Frage von BirgitBBatch & Shell12 Kommentare

Hallo, Eigentlich ist mir damals schon geholfen worden. Unter dem Link lösung Damals waren es immer 2 PDF-Dateien mit ...

Batch & Shell
Größere PDF Datei immer nach 3 Seiten trennen (pdftk)
gelöst Frage von IceAgeBatch & Shell6 Kommentare

Guten Morgen Liebe Kollegen, kleine Frage am Rande an diejenigen, die sich bereits mit pdftk auseinandergesetzt haben. Ich habe ...

Batch & Shell
Automatische PDF Erstellung mit PDFTK aus Dateien mit gleichen Anfangsbezeichnung im Dateinamen
gelöst Frage von BirgitBBatch & Shell7 Kommentare

Ich verstehe nichts von Programmierung. Das nur schon mal vorab. Habe mich auch schon 2 Tage durch die Seiten ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 10 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 12 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...