43964
25.01.2008, aktualisiert am 17.10.2012
41355
17
0
PDFs per Batch zusammenfügen
Hallo,
ich habe folgendes Szenario.
Unsere Kunden bekommen alle paar Tage Abrechnungen.
Diese Abrechnungen bestehen aus 4 PDF-Dateien.
Diese Dateien haben folgenden Aufbau:
1.) "Abrechnung_Rechnungen_KDNR_DATUM_LFDNR.PDF"
2.) "Abrechnung_Gesamt_ABCDE_KDNR_DATUM_LFDNR.PDF"
3.) "Abrechnung_Gesamt_FGHIJ_KDNR_DATUM_LFDNR.PDF"
4.) "Abrechnung_Buchungen_KDNR_DATUM_LFDNR.PDF"
KDNR: 4-Stellige (eindeutige) Kundennummer
DATUM: Erstellungsdatum. Format: 25012008
LFDNR: Laufende Abrechnungsnummer. Von 1 bis -theoretisch- unendlich.
ABCDE: Geschäftspartner 5stellig (möchte ich hier nicht nennen)
FGHIJ: Geschäftspartner 5stellig (möchte ich hier nicht nennen)
Diese Dokumente befinden sich in f:\outbox\aktuell\KDNR\ (also z.B. f:\outbox\aktuell\1234)
Jede Stunde werden diese Dokumente automatisch verschickt.
Der Ordner "aktuell" ist danach leer. Die Dokumente sind dann nach "f:\outbox\verarbeitet\DATUM\" verschoben.
Ziel ist es jetzt, diese 4 Dokumente per Batchbefehl (Also als stündlich geplanter Task) zu einem Dokument "Abrechnung_Gesamt_KDNR_DATUM_LFDNR.pdf" zusammenzufassen.
Die 4 Dokumente können dann anschließend gelöscht werden.
Adobe Professional 6.0 ist vorhanden.
Kann jemand mit einem Batch helfen?
Während der Testphase wäre es sinnvoll, wenn der Part des Löschens noch ausgeklammert wird.
Ich habe schon den Thread (PDF-Dateien in vielen Unterordnern mit PDFTK zusammenfügen und umbenennen (Windows)) gelesen, aber die Batch war für mich zu kompliziert, als dass ich diese einfach hätte umschreiben können.
Vielen Dank!
ich habe folgendes Szenario.
Unsere Kunden bekommen alle paar Tage Abrechnungen.
Diese Abrechnungen bestehen aus 4 PDF-Dateien.
Diese Dateien haben folgenden Aufbau:
1.) "Abrechnung_Rechnungen_KDNR_DATUM_LFDNR.PDF"
2.) "Abrechnung_Gesamt_ABCDE_KDNR_DATUM_LFDNR.PDF"
3.) "Abrechnung_Gesamt_FGHIJ_KDNR_DATUM_LFDNR.PDF"
4.) "Abrechnung_Buchungen_KDNR_DATUM_LFDNR.PDF"
KDNR: 4-Stellige (eindeutige) Kundennummer
DATUM: Erstellungsdatum. Format: 25012008
LFDNR: Laufende Abrechnungsnummer. Von 1 bis -theoretisch- unendlich.
ABCDE: Geschäftspartner 5stellig (möchte ich hier nicht nennen)
FGHIJ: Geschäftspartner 5stellig (möchte ich hier nicht nennen)
Diese Dokumente befinden sich in f:\outbox\aktuell\KDNR\ (also z.B. f:\outbox\aktuell\1234)
Jede Stunde werden diese Dokumente automatisch verschickt.
Der Ordner "aktuell" ist danach leer. Die Dokumente sind dann nach "f:\outbox\verarbeitet\DATUM\" verschoben.
Ziel ist es jetzt, diese 4 Dokumente per Batchbefehl (Also als stündlich geplanter Task) zu einem Dokument "Abrechnung_Gesamt_KDNR_DATUM_LFDNR.pdf" zusammenzufassen.
Die 4 Dokumente können dann anschließend gelöscht werden.
Adobe Professional 6.0 ist vorhanden.
Kann jemand mit einem Batch helfen?
Während der Testphase wäre es sinnvoll, wenn der Part des Löschens noch ausgeklammert wird.
Ich habe schon den Thread (PDF-Dateien in vielen Unterordnern mit PDFTK zusammenfügen und umbenennen (Windows)) gelesen, aber die Batch war für mich zu kompliziert, als dass ich diese einfach hätte umschreiben können.
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 79157
Url: https://administrator.de/contentid/79157
Ausgedruckt am: 25.11.2024 um 21:11 Uhr
17 Kommentare
Neuester Kommentar
Das lässt sich sogar kostenlos (=ohne Adobe) machen.
Ghostscript
Hier wird erklärt wie man mit Ghostscript merged (zusammenfügt): klick
Müsste man normalerweise alles per Batch erschlagen können.
Ghostscript
Hier wird erklärt wie man mit Ghostscript merged (zusammenfügt): klick
Müsste man normalerweise alles per Batch erschlagen können.
Hallo Schwimmbutz und Dynadrate!
Für jeden KDNR-Ordner wird vorweg geprüft, ob eine "Abrechnung_Rechnungen_KDNR_DATUM_LFDNR.PDF" vorhanden ist. Wird eine solche Datei gefunden, kann daraus der Teil "KDNR_DATUM_LFDNR.PDF" (Suffix) entnommen werden, um die weiteren 3 .pdf-Dateien damit zu identifizieren (aus der Beschreibung geht nicht eindeutig hervor, dass sich nur die angeführten 4 Dateien im jeweiligen Ordner befinden).
Die Sammeldatei wird im übergeordneten Ordner ("f:\outbox\aktuell") erstellt. Ist bereits eine gleichnamige Sammeldatei vorhanden, wird diese (durch Verwendung der Option "dont_ask") überschrieben.
Das Löschen wird durch die Ausgabe einer Liste der zu löschenden Dateien simuliert.
Grüße
bastla
[Edit] Sammeldatei wird im selben Ordner erstellt, daher muss diese vom Löschen ausgenommen werden - Code entsprechend angepasst. [/Edit]
Das lässt sich sogar kostenlos (=ohne Adobe) machen.
Auch, wie im oben zitierten Beispiel, mit pdftk.... Batch war für mich zu kompliziert, als dass ich diese einfach hätte umschreiben können.
Ich hoffe, dass es mir gelungen ist :@echo off & setlocal
set "Base=f:\outbox\aktuell"
set "PDFTK=C:\Tools\pdftk.exe"
::Download von: http://www.pdfhacks.com/pdftk/
set "PDF1=Abrechnung_Rechnungen"
set "PDF2=Abrechnung_Gesamt_?????"
set "PDF3=Abrechnung_Buchungen"
set "PDFGes=Abrechnung_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
::Loeschsimulation
echo Zu loeschen in %cd%:
echo.
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "%PDFGes%_%Suffix%"') do echo %%i
echo =============================================
echo.
echo.
:EndSub
popd
Das Löschen wird durch die Ausgabe einer Liste der zu löschenden Dateien simuliert.
Grüße
bastla
[Edit] Sammeldatei wird im selben Ordner erstellt, daher muss diese vom Löschen ausgenommen werden - Code entsprechend angepasst. [/Edit]
Hallo Schwimmbutz!
Ist mit "Abrechnung_Zahlungen_KDNR_DATUM_LFDNR.pdf" sowie "Abrechnung_Umbuchungen_KDNR_DATUM_LFDNR.pdf" jetzt die Liste der (uU) zu verarbeitenden Dateien komplett? Da "pdftk" nicht ganz entspannt auf nicht gefundene Dateien reagiert , muss ich noch eine Prüfung bzw eine Zusammenstellung der tatsächlich im jeweiligen Ordner vorhandenen Dateien einbauen.
Und nur zur Sicherheit: Die "Abrechnung_Rechnungen_KDNR_DATUM_LFDNR.PDF", aus welcher ich den variablen Teil (Suffix) hole, ist aber immer vorhanden?
Grüße
bastla
Ist mit "Abrechnung_Zahlungen_KDNR_DATUM_LFDNR.pdf" sowie "Abrechnung_Umbuchungen_KDNR_DATUM_LFDNR.pdf" jetzt die Liste der (uU) zu verarbeitenden Dateien komplett? Da "pdftk" nicht ganz entspannt auf nicht gefundene Dateien reagiert , muss ich noch eine Prüfung bzw eine Zusammenstellung der tatsächlich im jeweiligen Ordner vorhandenen Dateien einbauen.
Und nur zur Sicherheit: Die "Abrechnung_Rechnungen_KDNR_DATUM_LFDNR.PDF", aus welcher ich den variablen Teil (Suffix) hole, ist aber immer vorhanden?
Die Zeile "set "PDF2=Abrechnung_Gesamt_?????"" erfasst dann beide Dokumente (Also ABCDE und FGHIJ) ??
Das ist der Plan - es sei denn, ABCDE und FGHIJ wären konstant; dann würde ich sie exakt festlegen.Dann müsstest du mir noch verraten, wie ich später die Löschsimulation entferne damit das Proggi dann lauffähig ist.
Relativ einfach - die mit "echo" beginnenden Zeilen kannst Du ersatzlos streichen, und in der "for"-Zeile musst Du nur das "echo" durch ein "del" ersetzen.Grüße
bastla
Hallo Schwimmbutz!
Es sollten jetzt die beiden genannten zusätzlichen .pdf-Files ebenfalls in die Sammeldatei geschrieben werden. Wenn noch weitere Dateien (nur nach dem Muster "Abrechnung_Bezeichnung_KDNR_DATUM_LFDNR.pdf") hinzukommen, kannst Du diese einfach, durch Leerzeichen getrennt, in die Zeile "set PDFWeitere=..." aufnehmen.
Grüße
bastla
Es sollten jetzt die beiden genannten zusätzlichen .pdf-Files ebenfalls in die Sammeldatei geschrieben werden. Wenn noch weitere Dateien (nur nach dem Muster "Abrechnung_Bezeichnung_KDNR_DATUM_LFDNR.pdf") hinzukommen, kannst Du diese einfach, durch Leerzeichen getrennt, in die Zeile "set PDFWeitere=..." aufnehmen.
@echo off & setlocal
set "Base=f:\outbox\aktuell"
set "PDFTK=C:\Tools\pdftk.exe"
::Download von: http://www.pdfhacks.com/pdftk/
set "PDF1=Abrechnung_Rechnungen"
set "PDF2=Abrechnung_Gesamt_?????"
set "PDFWeitere=Abrechnung_Buchungen Abrechnung_Zahlungen Abrechnung_Umbuchungen"
set "PDFGes=Abrechnung_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"
set "PDFListe=%PDF1%_%Suffix%"
for %%a in (%PDF2%_%Suffix%) do call :ProcessFile "%%a"
for %%a in (%PDFWeitere%) do call :ProcessFile "%%a_%Suffix%"
"%PDFTK%" %PDFListe% cat output "%PDFGes%_%Suffix%" dont_ask
::Loeschsimulation
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "%PDFGes%_%Suffix%"') do echo del "%%i"
:EndSub
popd
goto :eof
:ProcessFile
if exist "%~1" set "PDFListe=%PDFListe% %~1"
Grüße
bastla
Hallo Schwimmbutz!
Sind eigentlich (wie bisher von mir angenommen) "ABCDE" und "FGHIJ" variabel? Falls nein, lässt sich natürlich die Reihenfolge entsprechend fixieren, falls doch, müsstest Du ein Kriterium für die Reihung angeben (= woran ist "ABCDE" zu erkennen?).
Grüße
bastla
Sind eigentlich (wie bisher von mir angenommen) "ABCDE" und "FGHIJ" variabel? Falls nein, lässt sich natürlich die Reihenfolge entsprechend fixieren, falls doch, müsstest Du ein Kriterium für die Reihung angeben (= woran ist "ABCDE" zu erkennen?).
Abrechnung_Buchungen ... IMMER vorhanden
In der nächsten Version (erst, wenn obige Frage geklärt ist) werde ich dann das Auslesen des Suffix "KDNR_DATUM_LFDNR.PDF" auf Basis dieser Datei vornehmen.Grüße
bastla
Hallo Schwimmbutz!
Dann versuchen wir's mal so:
Die Reihenfolge der einzelnen Dateien kannst Du in der Zeile
festlegen.
Grüße
bastla
Dann versuchen wir's mal so:
@echo off & setlocal
set "Base=f:\outbox\aktuell"
set "PDFTK=C:\Tools\pdftk.exe"
::Download von: http://www.pdfhacks.com/pdftk/
set "PDFCheck=Abrechnung_Buchungen"
set "PDFAlle=Abrechnung_Gesamt_ABCDE Abrechnung_Gesamt_FGHIJ Abrechnung_Rechnungen Abrechnung_Zahlungen Abrechnung_Umbuchungen Abrechnung_Buchungen"
set "PDFGes=Abrechnung_Gesamt"
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i"
goto :eof
:ProcessCust
pushd "%~f1"
if not exist "%PDFCheck%_*.pdf" goto :EndSub
for /f "tokens=2* delims=_" %%a in ('dir /b "%PDFCheck%_*.pdf"') do set "Suffix=%%b"
set PDFListe=
for %%a in (%PDFAlle%) do call :ProcessFile "%%a_%Suffix%"
"%PDFTK%" %PDFListe% cat output "%PDFGes%_%Suffix%" dont_ask
::Loeschsimulation
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "%PDFGes%_%Suffix%"') do echo %%i
:EndSub
popd
goto :eof
:ProcessFile
if exist "%~1" set "PDFListe=%PDFListe% %~1"
set "PDFAlle=..."
Grüße
bastla