Merge (PS-Write Modul) von mehreren pdf-Dokumenten mit Variable
Hallo,
ich arbeite gerade an einer Leerseitenerkennung per OCR
Hierzu zerlege ich jedes Dokument in seine einzelnen Seiten eine OCR Erkennung kann man dann per pdf24 machen und man hat dann über Convertpdf2txt eine ,öglichkeit die Seite nach Zeicheninhalt zu bewerten...
Ich habe aber eine Frage beim Zusammenbauen des PDFs aus den einzenen Seiten:
das sind z.B. die Seiten:
für das pdf-merge passe ich dann die Ausagbe an ....aber es funktioniert nicht ich habe hier in der ISE immer einen Zeilenumbruch wenn ich die Variable in eine txt Datei schmeiße ist es mit Zeilenumbrauch raus auch hintereinander...
Nehme ich den Inhalt aus der Variable und fügen den hintereinandere ein Funktioniert das "mergen"
Ich habe auch mit pdf24 und expanddirs geschaut aber da habe ich ein Problem mit der Sortierung 1 , 2 ,11, 12 , 3 ,4)
hier mal mein Testcode:
anscheinend wird der Inahlt von der Variablen $ob nicht direkt hintereinander verwendet? Setze ich wie gesagt den Inhalt aus der Variable an Stelle der VAriable funktioniert das ganze.
Vielleicht hat einer einen Tipp für mich
ich arbeite gerade an einer Leerseitenerkennung per OCR
Hierzu zerlege ich jedes Dokument in seine einzelnen Seiten eine OCR Erkennung kann man dann per pdf24 machen und man hat dann über Convertpdf2txt eine ,öglichkeit die Seite nach Zeicheninhalt zu bewerten...
Ich habe aber eine Frage beim Zusammenbauen des PDFs aus den einzenen Seiten:
das sind z.B. die Seiten:
PS C:\Users\Marian\Desktop\pdf blank> $Datei
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0000.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0001.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0002.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0003.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0004.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0005.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0006.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0007.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0008.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0009.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf00010.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf00011.pdf
C:\Users\Marian\Desktop\pdf blank\split\Outputpdf00012.pdf
Nehme ich den Inhalt aus der Variable und fügen den hintereinandere ein Funktioniert das "mergen"
$ob
"C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0000.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0001.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0002.pdf", "C:\Users\Marian\Deskt
op\pdf blank\split\Outputpdf0003.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0004.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0005.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Out
putpdf0006.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0007.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0008.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Outputpdf0009.pdf", "C:\U
sers\Marian\Desktop\pdf blank\split\Outputpdf00010.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Outputpdf00011.pdf", "C:\Users\Marian\Desktop\pdf blank\split\Outputpdf00012.pdf"
Ich habe auch mit pdf24 und expanddirs geschaut aber da habe ich ein Problem mit der Sortierung 1 , 2 ,11, 12 , 3 ,4)
hier mal mein Testcode:
$datneu = 0
set-location "C:\Users\Marian\Desktop\pdf blank"
$ordner = "C:\Users\Marian\Desktop\pdf blank"
#sortieren-reihenfolge
#Split-Pdf -FilePath "C:\Users\Marian\Desktop\pdf blank\Anschreiben.pdf" -OutputFolder "C:\Users\Marian\Desktop\pdf blank\split" -OutputName Outputpdf00000
$Datei=(get-childitem "C:\Users\Marian\Desktop\pdf blank\split").FullName |Sort-Object { [regex]::Match($_, '\d+').Value -as [int] }
Clear-Variable "datneu"
foreach ($da in $Datei) {
$datneu += '"'+$da+'", '
}
$ob=($datneu).TrimEnd(", ")
merge-pdf -InputFile $ob -OutputFile "C:\Users\Marian\Desktop\pdf blank\out3.pdf"
anscheinend wird der Inahlt von der Variablen $ob nicht direkt hintereinander verwendet? Setze ich wie gesagt den Inhalt aus der Variable an Stelle der VAriable funktioniert das ganze.
Vielleicht hat einer einen Tipp für mich
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6518864598
Url: https://administrator.de/forum/merge-ps-write-modul-von-mehreren-pdf-dokumenten-mit-variable-6518864598.html
Ausgedruckt am: 20.04.2025 um 15:04 Uhr
16 Kommentare
Neuester Kommentar

Einfach nur das String-Gebastel weglassen, Merge-PDF erwartet ja ein String-Array keinen ehlend langen String mit allen Dateien.
Gruß schrick
$sorted = get-childitem "C:\Users\Marian\Desktop\pdf blank\split" -File -Filter *.pdf | Sort-Object {[int][regex]::match($_.Basename,'\d+$').Value} | % Fullname
merge-pdf -InputFile $sorted -OutputFile "C:\Users\Marian\Desktop\pdf blank\merged.pdf"
Gruß schrick
https://gist.github.com/blackhalt/41d8b4d79a5d9a1ea7502df2c8125b77
Geht auch mit PostScript. Hier wird dann prozentual die Füllung ermittelt.
inkcov ist da das Zauberwort.
grep und den anderen Teil kannst du auch mit PowerShell abbilden. Was ist mit Grafiken? Der Ansatz mit OCR ist nicht schlecht, aber ggf. wäre es mit der Abdeckung noch besser.
ps gibt es auch für Windows. Lässt sich also auch in dein Script integrieren.
Geht auch mit PostScript. Hier wird dann prozentual die Füllung ermittelt.
inkcov ist da das Zauberwort.
grep und den anderen Teil kannst du auch mit PowerShell abbilden. Was ist mit Grafiken? Der Ansatz mit OCR ist nicht schlecht, aber ggf. wäre es mit der Abdeckung noch besser.
ps gibt es auch für Windows. Lässt sich also auch in dein Script integrieren.
Du hattest in der Nachricht Handschriften erwähnt.
Für Barcodes hab ich mal mit PS Bild aufgeteilt, so dass nur der Barcode - immer an einer Stelle in dem Fall - erkannt wird. Die Barcode DLL würde aber auch auf der kompletten Seite Barcode finden. Auch mehrere. Die Logik dahinter ist etwas komplex. Könnte man natürlich auch abwandeln um leere Seiten zu ermitteln. Wäre aber wohl zu viel des Guten
https://stackoverflow.com/questions/68912911/slice-image-and-save-each-s ...
Was soll das ganze? Man kann Ausschnitt als Objekt in PS weiter übergeben und analysieren. Bei der Variante mit Ghotscript z.B. nur den 5x5 cm Bereich analysieren lassen.
Wenn du bei manchen Seiten an die Grenzen stößt, könntest du die Genauigkeit erhöhen, in dem nur ein begrenztes Feld betrachtet wird.
Bei deiner Variante oben mit PDF zu Text wäre das hilfreich, da komische Hieroglyphen dann reduziert werden, da der Ausschnitt nahezu rein weißen Bereich zeigt.
Ist für den Anfang kein muss. Aber Rectangle ausschneiden ist easy und durch kleine Referenzbilder der Din A4 Seite kann man einiges optimieren.....
Nur so eine Idee.
Für Barcodes hab ich mal mit PS Bild aufgeteilt, so dass nur der Barcode - immer an einer Stelle in dem Fall - erkannt wird. Die Barcode DLL würde aber auch auf der kompletten Seite Barcode finden. Auch mehrere. Die Logik dahinter ist etwas komplex. Könnte man natürlich auch abwandeln um leere Seiten zu ermitteln. Wäre aber wohl zu viel des Guten
https://stackoverflow.com/questions/68912911/slice-image-and-save-each-s ...
Was soll das ganze? Man kann Ausschnitt als Objekt in PS weiter übergeben und analysieren. Bei der Variante mit Ghotscript z.B. nur den 5x5 cm Bereich analysieren lassen.
Wenn du bei manchen Seiten an die Grenzen stößt, könntest du die Genauigkeit erhöhen, in dem nur ein begrenztes Feld betrachtet wird.
Bei deiner Variante oben mit PDF zu Text wäre das hilfreich, da komische Hieroglyphen dann reduziert werden, da der Ausschnitt nahezu rein weißen Bereich zeigt.
Ist für den Anfang kein muss. Aber Rectangle ausschneiden ist easy und durch kleine Referenzbilder der Din A4 Seite kann man einiges optimieren.....
Nur so eine Idee.
PS:
Die Barcode DLL oben analysiert das Bild mit Hilfe eines Histogrammes um die Barcodes zu erkennen.
https://github.com/LazoCoder/Image-Processing-Library
https://github.com/topics/histogram?l=c%23
Eine C# DLL kann man in PS sehr einfach einbinden und die Funktion aufrufen.
Finde auf die schnelle keine einfache DLL für dich. Aber ein Histogram würde auch dein Handschriftenproblem lösen. Man kann es ja sehr genau einstellen.
Histogramm wäre eig. mit das Mittel der Wahl für so ein Vorhaben.
Beispiel: Bildauswahl an DLL übergeben und Barcode ermittel
Grundlage: https://www.nuget.org/packages/BarcodeImaging
Die Barcode DLL oben analysiert das Bild mit Hilfe eines Histogrammes um die Barcodes zu erkennen.
https://github.com/LazoCoder/Image-Processing-Library
https://github.com/topics/histogram?l=c%23
Eine C# DLL kann man in PS sehr einfach einbinden und die Funktion aufrufen.
[void] [System.Reflection.Assembly]::LoadFrom("c:\temp\BarcodeImaging.dll");
$barcodes = @{}
[BarcodeImaging]::FullScanPage([ref] $barcodes, $src, 150)
Finde auf die schnelle keine einfache DLL für dich. Aber ein Histogram würde auch dein Handschriftenproblem lösen. Man kann es ja sehr genau einstellen.
Histogramm wäre eig. mit das Mittel der Wahl für so ein Vorhaben.
Beispiel: Bildauswahl an DLL übergeben und Barcode ermittel
Grundlage: https://www.nuget.org/packages/BarcodeImaging
using namespace System.Drawing;
Add-Type -AssemblyName System.Drawing;
[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$testBild = "C:\temp\code_ls4.png-1.png"
$src=[System.Drawing.Image]::FromFile($testBild)
$rect = New-Object System.Drawing.Rectangle(740,1500,400,250) # top, left, width, height of slice
$slice = $src.Clone($rect, $src.PixelFormat);
#$slice.Save("c:\temp\test_slice.png", "png");
$src = $slice;
[void] [System.Reflection.Assembly]::LoadFrom("c:\temp\BarcodeImaging.dll");
$barcodes = @{}
[BarcodeImaging]::FullScanPage([ref] $barcodes, $src, 150)
$barcodes
Könnte. Normal müsste man mit den Werten auch ein table Objekt füllen können.
Vorteil von Zahlen ist dass die vergleichbar sind. Man könnte mit den Werten dann einen Bereich festlegen wo es sicher weiß ist. Bei ungenauen Mail-Benachrichtigung oder Logfile füllen. So kann man später Fehler nachvollziehen.
Sind die Referenz Bilder Seiten füllend oder nur Briefpapier? Rectangle wäre ggf. da was? Also einfach einen Ausschnitt damit croppen und den dann vergleichen? Wenn Grafiken nur an den Rändern sind, könnte man so auch leeres Briefpapier ermitteln.
https://github.com/dmtrKovalenko/odiff
Denke du meinst sowas. Ja das geht auch. Wenn du fit in Visual Studio bist wäre github dein Freund.
Mergen fast ja nur Bilder an Rändern zusammen. Morphen und Demorphen. So kam ich drauf.
odiff scheint schon in die Richtung zu gehen, die dir vorschwebt.
https://github.com/mapbox/pixelmatch
Pixelmatch tut ähnliches.
Vorteil von Zahlen ist dass die vergleichbar sind. Man könnte mit den Werten dann einen Bereich festlegen wo es sicher weiß ist. Bei ungenauen Mail-Benachrichtigung oder Logfile füllen. So kann man später Fehler nachvollziehen.
Sind die Referenz Bilder Seiten füllend oder nur Briefpapier? Rectangle wäre ggf. da was? Also einfach einen Ausschnitt damit croppen und den dann vergleichen? Wenn Grafiken nur an den Rändern sind, könnte man so auch leeres Briefpapier ermitteln.
https://github.com/dmtrKovalenko/odiff
Denke du meinst sowas. Ja das geht auch. Wenn du fit in Visual Studio bist wäre github dein Freund.
Mergen fast ja nur Bilder an Rändern zusammen. Morphen und Demorphen. So kam ich drauf.
odiff scheint schon in die Richtung zu gehen, die dir vorschwebt.
https://github.com/mapbox/pixelmatch
Pixelmatch tut ähnliches.
Grauschleier bekommt man auch anders weg! Helligkeit, Kontrast und Gamma Korrektur.
Zeit bei OCR ist relativ. Kommt drauf an wie schnell die Dokumente ankommen sollen. Ein Hersteller macht ähnliches mit Barcode etc .Nennt die Dokumente dann automatisch um. Verlangen teils 3.500 Euro für die Software....
Sowas kann man sich sparen. Handschrift ist natürlich mit eine Show-Stopper.
Wenn du Zeit hast und OCR noch suchst: https://github.com/tesseract-ocr/tesseract
Tesseract wird auch von DMS eingesetzt. Kommt auch bei historischen Schriften zum Einsatz.
https://github.com/DerrickFeiWang/HandwritingRecognition_GoogleCloudVisi ...
Also ja - sowas geht auch. Wir werden nur gerade immer Komplexer!
Ggf. kombinieren und mehrere Channels bereitstellen. Kommt A nicht ganz hin, wird es in B weiter analysiert. Mit Histogrammen oder anderen Methoden die Werte ermitteln kann man Toleranzen festlegen.
Ich würde aber mal langsam anfangen. Ggf. wie oben in meinen Code Bsp. das Image mal durch
https://github.com/BadAga/ImageProcessing
Hau das Bild mal durch Filter durch.
Wenn du keine DLL willst würde auch Batch Verarbeitung mit PhotoFiltre o.ä. gehen. Nur das verlangsamt dann den Prozess.
Es gibt auch command-line tools die auf diese Art Grauschleier entfernen.
Es gibt ja zig Ansätze.
Zeit bei OCR ist relativ. Kommt drauf an wie schnell die Dokumente ankommen sollen. Ein Hersteller macht ähnliches mit Barcode etc .Nennt die Dokumente dann automatisch um. Verlangen teils 3.500 Euro für die Software....
Sowas kann man sich sparen. Handschrift ist natürlich mit eine Show-Stopper.
Wenn du Zeit hast und OCR noch suchst: https://github.com/tesseract-ocr/tesseract
Tesseract wird auch von DMS eingesetzt. Kommt auch bei historischen Schriften zum Einsatz.
https://github.com/DerrickFeiWang/HandwritingRecognition_GoogleCloudVisi ...
Also ja - sowas geht auch. Wir werden nur gerade immer Komplexer!
Ggf. kombinieren und mehrere Channels bereitstellen. Kommt A nicht ganz hin, wird es in B weiter analysiert. Mit Histogrammen oder anderen Methoden die Werte ermitteln kann man Toleranzen festlegen.
Ich würde aber mal langsam anfangen. Ggf. wie oben in meinen Code Bsp. das Image mal durch
https://github.com/BadAga/ImageProcessing
Hau das Bild mal durch Filter durch.
Wenn du keine DLL willst würde auch Batch Verarbeitung mit PhotoFiltre o.ä. gehen. Nur das verlangsamt dann den Prozess.
Es gibt auch command-line tools die auf diese Art Grauschleier entfernen.
Es gibt ja zig Ansätze.