baraban
Goto Top

Anfänger benötigt Hilfe bei PDFs

Hallo zusammen,

ich bin ein leidgeplagter Endnutzer der bei dem leidigen Thema PDFs zusammenführen Hilfe benötigt. Ich habe mir hier schon ein paar Beiträge durchgelesen aber mein Verständnis reicht irgendwie nicht aus um das umzusetzen. Ich hoffe hier auf eine simple Lösung meines Problems:

Ich habe einen Ordnern mit knapp 250 PFDs mit folgender Bezeichnung: Müller, Max_Report per_30.09.2021.pdf (Datum ändert sich)
In einem anderen Ordner liegen knapp 220 PDFs mit folgender Bezeichnung: Müller.pdf (Dateiname bleibt immer gleich)

Ich suche jetzt eine Möglichkeit um die Müller, Max_Report ... mit der Müller.pdf automatisch zu verbinden, sodass der Report die erste Seite ist. Als Dateiname soll Müller, Max_Report per 30.09.2021 bleiben. Manche Reports haben keinen Anhang und bleiben bestehen.

Ich bin bezüglich Batch oder Powershell komplett unerfahren und habe bisher immer PDF24, Foxit oder Printconductor benutzt. Das wird mittlerweile bei der Vielzahl an Dateien einfach nervig diese manuell zu verbinden.

Gibt es für meinen Fall eine simple Lösung? Ich bin auch bereit eine Art "Leitfaden" zu schreiben, welche Dateien zusammengehören oder sowas. Aber ich finde einfach kein Programm welches mir sowas anbietet. Am besten wäre es natürlich wenn man die Dateinamen abgleichen könnte und die dann zusammenfügen könnte. Die Müller.pdf lässt sich auch anpassen in Müller,Max.pdf oder ähnlich.

Ich bin für jede Hilfe dankbar!

Beste Grüße und schönen Abend!

Content-ID: 1399273628

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

Ausgedruckt am: 19.11.2024 um 22:11 Uhr

aqui
aqui 17.10.2021 aktualisiert um 19:21:29 Uhr
Goto Top
Ich bin auch bereit eine Art "Leitfaden" zu schreiben
Das wäre sicher nicht das Verkehrteste, denn die Beschreibung oben ist auch für einen Profi recht und man hat es auch nach 2maligem Lesen schwer das alles zu sortieren.
Einmal redest du von "PFDs", dann willst du dem Forum weismachen das du in einem Ordner 220 mal den gleichen Dateinamen hast, dann wieder Dateinamen mit Kommas und Leerzeichen...
Mal im Ernst...mit solch wirrer und konfuser Beschreibung was genau du mit welchen konkreten Dateinamen erreichen willst bzw. dein Ziel sein soll, ist doch eine zielführende Hilfe fast unmöglich. face-sad
Drohnald
Drohnald 17.10.2021 um 19:36:02 Uhr
Goto Top
Hi,

falls du das gerne selbst probieren möchtest:
Der PDF24 kann über die Kommandozeile bedient werden.
https://creator.pdf24.org/manual/10/#pdf24-doctoolexe

Mit Powershell müsstest du also erstmal die beiden zusammengehörigen Dateien finden und dann in etwa
pdf24-DocTool.exe -join -outputDir C:\temp -outputFile datei1 datei1 datei2

Viel Erfolg!
P.s.: Hier gibt es einige Powershellprofis, vll. erbarmt sich jemand face-smile
Baraban
Baraban 17.10.2021 aktualisiert um 19:55:42 Uhr
Goto Top
Hi,
danke für euren Input.

Also der Workflow ist folgender:
Es werden 4 mal im Jahr knapp 250 Berichte erzeugt und separat die dazugehörenden Rechnungen.
(Bericht: Kunde1_Report per 31.03.2021.pdf und Rechnung: Kunde1.pdf)

Der Berichtsname bleibt bis auf das Datum (31.03.,30.06.,30.09.,31.12.) immer gleich. Die jeweilige Rechnung hat kein Datum im Namen, sondern ist einfach in einem anderen Ordner (1. Quartal, 2. Quartal etc.)

Bisher habe ich die Rechnungen in den Ordner mit den Berichten gepackt, dann waren die Dateien namentlich sortiert:
Kunde1_Report per 31.03.2021.pdf
Kunde1.pdf
Kunde2_Report per 31.03.2021.pdf
Kunde2.pdf
...
Kunde250_Report per 31.03.2021.pdf
Kunde250.pdf

und diese dann manuell zusammengeführt und als Kunde1_Report per 31.03.2021.pdf, Kunde2_Report per 31.03.2021.pdf etc. gespeichert.

Diesen absolut irrsinnigen Vorgang möchte ich gerne automatisieren, indem ich beide Dateien automatisiert zusammenfüge und abspeichern lasse.

Vielen Dank weiterhin für jeglichen Input.
149569
149569 17.10.2021 um 20:01:02 Uhr
Goto Top
erikro
erikro 18.10.2021 um 11:49:43 Uhr
Goto Top
Moin,

das ist eine Aufgabe für die Powershell. Guckst Du hier:
https://evotec.xyz/merging-splitting-and-creating-pdf-files-with-powersh ...

Falls Du das nicht alleine kannst, musst Du warten, bis ich Zeit und Lust habe, ein Skript zu schreiben. face-wink

Liebe Grüße

Erik
149569
Lösung 149569 18.10.2021 aktualisiert um 12:39:32 Uhr
Goto Top
Schnell zusammen geschribselt...
# quellordner 1
$source = "D:\Ordner\reports"  
# quellordner 2
$source2 = "D:\Ordner\reports2"  
# Ausgabeordner
$output = "D:\output"  

# --------------------
# installiere nötiges Module wenn nicht vorhanden
if (!(Get-Module -ListAvailable -Name PSWritePDF)){
    write-host "PSWritePDF Modul ist nicht installiert, starte eine elevierte Powershell um das Modul zu installieren ..." -F Yellow  
    start powershell -verb runas -ArgumentList '-c "Install-Module -Name PSWritePdf -Force"' -Wait  
    if (!(Get-Module -ListAvailable -Name PSWritePDF)){
        write-error "Missing powershell module 'PSWritePDF'" -Category NotInstalled  
        exit 1
    }
}
#-------------------------

# gruppiere die pdfs anhand des strings vom Anfang bis zum ersten Unterstrich im Dateinamen
(Get-ChildItem $source -File -Filter *.pdf) + (Get-ChildItem $source2 -File -Filter *.pdf) | group {$_.Basename.split('_')} | %{  
    if ($_.Count -gt 1){
        # merge pdfs
        Merge-PDF -InputFile $_.Group.Fullname -outputfile "$output\$($_.Group.Name)" -verbose  
    }
}
erikro
erikro 18.10.2021 um 12:29:55 Uhr
Goto Top
Nicht so streng. face-wink

Zitat von @aqui:
Einmal redest du von "PFDs", dann willst du dem Forum weismachen das du in einem Ordner 220 mal den gleichen Dateinamen hast,

Na, das habe ich so verstanden, dass 220 Dateien nach dem Muster existieren. Also müller.pdf, meier.pdf, schulze.pdf usw.

dann wieder Dateinamen mit Kommas und Leerzeichen...

Wieso? Geht doch. Ist nicht schön und macht einen Haufen Probleme beim Skripten. Aber es geht. face-wink
erikro
erikro 18.10.2021 um 18:02:09 Uhr
Goto Top
Moin,

sehr gut! Das erspart mir jetzt die Arbeit. face-wink

Liebe Grüße

Erik
Baraban
Baraban 19.10.2021 aktualisiert um 11:29:01 Uhr
Goto Top
Ahoi,
erstmal vielen Dank für die Zahlreichen Nachrichten. Ich habe den Code von hacktor benutzt, kriege jedoch jedes mal eine Fehlermeldung bezüglich des Moduls:

Import-Module : Die Datei "C:\Program Files\WindowsPowerShell\Modules\PSWritePDF\0.0.17\PSWritePDF.Libraries.ps1" kann
nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden
Sie unter "about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).
In Zeile:1 Zeichen:1
Import-Module PSWritePDF
+ CategoryInfo : Sicherheitsfehler: (: )[Import-Module], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand


Ich habe in der Zwischenzeit etwas mit pdftk und einem Batch Script experimentiert und kriege das auch zum Laufen. Dafür muss ich dann jedoch initial 250 dieser Befehle schreiben und bei neuen Berichten ständig aktualisieren.

Lässt sich mein glorreicher Script dahingehend ändern, dass er automatisch die gleichen Dateinamen sucht?

pdftk "H:\Musterordner\Berichte\Kunde1_Report per*.pdf" "H:\Musterordner\Berichte\Kunde1.pdf" cat output "H:\Musterordner\Berichte\Kunde1_Report_final.pdf"

Vielen Dank schonmal. Ich bin der Lösung schon einen großen Schritt weiter.
149569
149569 19.10.2021 aktualisiert um 11:46:47 Uhr
Goto Top
da die Ausführung von Skripts auf diesem System deaktiviert ist.
Ist doch klar ... einfach mal zu den Basics belesen und die Ausführungsrichtlinie anpassen dann lüppt dat ...
https://www.msxfaq.de/code/powershell/ps_executionpolicy.htm
https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell. ...
Ich bin der Lösung schon einen großen Schritt weiter.
Die Lösung steht oben schon fix und fertig face-smile.
Set-Executionpolicy RemoteSigned
einmalig in einer elevated Powershell starten, fertig.
Dafür muss ich dann jedoch initial 250 dieser Befehle schreiben und bei neuen Berichten ständig aktualisieren
Dümmer geht's dann wirklich nümmer! => Tutorial zur FOR-Schleife
Baraban
Baraban 19.10.2021 um 13:38:03 Uhr
Goto Top
Ahoi Hacktor,

vielen Dank für deine Hilfe. Es klappt!

Am längsten hat es gedauert das Modul ans Laufen zu bekommen.

Wärst du eventuell noch so freundlich mir bei folgendem Szenario zu helfen: An alle PDFs in einem Order soll eine bestimmte PDF am Ende hinzugefügt werden.

Ich dank dir vielmals im Voraus!
149569
149569 19.10.2021 aktualisiert um 13:43:21 Uhr
Goto Top
Wärst du eventuell noch so freundlich mir bei folgendem Szenario zu helfen: An alle PDFs in einem Order soll eine bestimmte PDF am Ende hinzugefügt werden.

$quelle = "D:\Ordner"  
$template = "D:\template.pdf"  
$zielordner = "D:\output"  
Get-ChildItem $quelle -File Filter *.pdf | %{
    Merge-PDF -InputFile $_.Fullname,$template -Outputfile "$zielordner\$($_.Name)"  
}
Baraban
Baraban 19.10.2021 um 14:08:06 Uhr
Goto Top
Du bist der Beste! Danke dir!

Schon sehr frustrierend zu sehen wie wenig Code man braucht um stundenlange Prozesse zu automatisieren. Besser spät als nie!
149569
149569 19.10.2021 aktualisiert um 14:17:16 Uhr
Goto Top
Zitat von @Baraban:
Schon sehr frustrierend zu sehen wie wenig Code man braucht um stundenlange Prozesse zu automatisieren. Besser spät als nie!
Da brauchst du nur mal in unsere Amtsstuben hier in DE schauen, da könnte man 80% der Mitarbeiter einsparen die da tag täglich monotone Fließband-Arbeiten verrichten die meistens vollkommen überflüssig ist wenn da mal jemand IT affines aufräumen würde.
aqui
aqui 19.10.2021 um 14:17:22 Uhr
Goto Top
Besser spät als nie!
Weise Worte...! face-wink
Powershell Leitfaden für Anfänger
Baraban
Baraban 27.10.2021 um 11:43:25 Uhr
Goto Top
Ahoi,

hacktors Code funktioniert bisher wunderbar. Ich möchte diesen gerne etwas abändern, sodass die Dateien aus dem Quellordner 1 überschrieben werden, sofern eine Datei aus dem Quellordner 2 hinzugefügt worden ist, sodass kein Ausgabeordner mehr nötig ist.

Wäre super, wenn mir jemand helfen könnte. Vielen Dank vorab!

# quellordner 1
$source = "D:\Ordner\reports"  
# quellordner 2
$source2 = "D:\Ordner\reports2"  
# Ausgabeordner
$output = "D:\output"  

# --------------------
# installiere nötiges Module wenn nicht vorhanden
if (!(Get-Module -ListAvailable -Name PSWritePDF)){
    write-host "PSWritePDF Modul ist nicht installiert, starte eine elevierte Powershell um das Modul zu installieren ..." -F Yellow  
    start powershell -verb runas -ArgumentList '-c "Install-Module -Name PSWritePdf -Force"' -Wait  
    if (!(Get-Module -ListAvailable -Name PSWritePDF)){
        write-error "Missing powershell module 'PSWritePDF'" -Category NotInstalled  
        exit 1
    }
}
#-------------------------

# gruppiere die pdfs anhand des strings vom Anfang bis zum ersten Unterstrich im Dateinamen
(Get-ChildItem $source -File -Filter *.pdf) + (Get-ChildItem $source2 -File -Filter *.pdf) | group {$_.Basename.split('_')} | %{  
    if ($_.Count -gt 1){
        # merge pdfs
        Merge-PDF -InputFile $_.Group.Fullname -outputfile "$output\$($_.Group.Name)" -verbose  
    }
}
149569
149569 27.10.2021 aktualisiert um 14:37:32 Uhr
Goto Top
# quellordner 1
$source = "D:\Ordner\reports"  
# quellordner 2
$source2 = "D:\Ordner\reports2"  

# --------------------
# installiere nötiges Module wenn nicht vorhanden
if (!(Get-Module -ListAvailable -Name PSWritePDF)){
    write-host "PSWritePDF Modul ist nicht installiert, starte eine elevierte Powershell um das Modul zu installieren ..." -F Yellow  
    start powershell -verb runas -ArgumentList '-c "Install-Module -Name PSWritePdf -Force"' -Wait  
    if (!(Get-Module -ListAvailable -Name PSWritePDF)){
        write-error "Missing powershell module 'PSWritePDF'" -Category NotInstalled  
        exit 1
    }
}
#-------------------------

# gruppiere die pdfs anhand des strings vom Anfang bis zum ersten Unterstrich im Dateinamen
(Get-ChildItem $source -File -Filter *.pdf) + (Get-ChildItem $source2 -File -Filter *.pdf) | group {$_.Basename.split('_')} | %{  
    if ($_.Count -gt 1){
        try{
            # PDFs in *.new Datei mergen
            Merge-PDF -InputFile $_.Group.Fullname -outputfile "$source\$($_.Group.Name).new" -verbose -EA Stop  
            # Originaldatei aus Quellordner 1 entfernen
            remove-item $_.Group.Fullname -Force
            # *.new Datei in Originaldateiname umbenennen
            rename-item "$source\$($_.Group.Name).new" -NewName "$source\$($_.Group.Name)"  
        }catch{
            write-host $_.Exception -F Red
        }
    }
}
Baraban
Baraban 28.10.2021 um 09:11:52 Uhr
Goto Top
Kann dir nicht genug danken!

Mit deinem Wissen würde ich die Welt beherrschen face-wink

Beste Grüße