wovokim
Goto Top

Powershell: PDFs erstellen durch JPG. Was erstelle ich den Foreach Loop?

Hallo,

ich bin was das programmieren angeht ein Totalanfänger (mache das eher aus Hobby). Ich habe jedoch ein kleines Projekt, wo ich aus Jpg Dateien eine PDF erstellen möchte, jedoch benutze ich eine drittHersteller Software, die sehr gut funktioniert. http://www.compulsivecode.com/Project_ImageToPDF.aspx


Also man kann durch folgenden Befehlt alle .Jpg Dateien aus einem Ordner in eine PDF zusammenfügen durch die Software.

"C:\Users\{Username}\Desktop\App\ImageToPDForXPS.exe" "C:\Users\{Username}\Desktop\App\Output\OUTPUTNAME.PDF" "C:\Users\{Username}\Desktop\App\JPG\Sample PDF 1\*"


Jetzt habe ich jedoch mehrere Ordner, die jeweils jpg bilder enthalten. Ich möchte jeweils folgendes erreichen:

Der Outputname der App soll immer der Ordnername sein. (Sample PDF 1.pdf oder Sample PDF 2.pdf).
Der Input soll jeweils der Ordnerinhalt sein.
Deshalb habe ich ein kleines Programm geschrieben in Powershell, jedoch verstehe ich nicht, wie ich die Duplikate entferne.


Mein Programmordnerstruktur sieht wie folgt aus:

APP
ImageToPDForXPS.exe
Pdf.ps
=>JPG=>SAMPLE PDF 1 (jeweils die Bilder)
=>JPG=>SAMPLE PDF 2 (jeweils die Bilder)
=>OUTPUT

Hier ist der Code:
$parent = (Get-Item -Path '.\' -Verbose).FullName  

#Path to your ImageToPDFFor.exe
$tool = $parent + '\ImageToPDForXPS.exe'  

#Directory containing the .JPG files that will be converted
$inputDir = $parent + '\JPG\'  

#Output path where the PDF files will be saved
$outputDir = $parent + '\Output\'  

#This will get all the files in the jpg directory
$jpgs = get-childitem $inputDir -recurse | where {$_.Extension -match "jpg"}  



foreach ($jpg in $jpgs)
{

    $inputpath = Split-Path -Path $jpg.FullName
    #Write-Output ($inputpath)
    $inputpathcorrected = $inputpath + "\*"  
    #Write-Output ($inputpathcorrected)
    
    $outputpdf = Split-Path (Split-Path $jpg.FullName -Parent ) -Leaf 
    #Write-Output ($outputpdf)
    $outputpdfcorrected =$outputDir + $outputpdf + ".pdf"   
    Write-Output ($outputpdfcorrected)   

    

    
}

 & $tool $outputpdfcorrected $inputpathcorrected


EXIT



Ich danke vielmals um die Hilfe, wie ich das hinkriegen könnte.

Content-Key: 651201

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

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: lcer00
lcer00 13.02.2021 um 19:06:07 Uhr
Goto Top
Hallo,

Was genau ist Deine Frage?

Soll das pro Verzeichnis ein PDF werden? Dann musst Du Verzeichnisse suchen, nicht Dateien.

Oder willst - egal wo jpgs drin sind, immer pro solch ein Verzeichnis ein PDF schreiben?

Dann schreib alle Verzeichnisse aus Split-Path (ohne weitere Argumente als -Path) in ein Array. Dann kannst Du die Duplikate aus dem Array mittels Sort-Object -Unique entfernen. Das Array kannst Du Dann für Deine Schleife nehmen - innerhalb dieser rufst Du das Tool auf.

Falls es aber nur um 2 Verzeichnisse geht, würde ich dass Array direkt mit den Pfaden belegen und nich aufwändig suchen.

Grüße

lcer
Mitglied: wovokim
wovokim 13.02.2021 um 19:34:31 Uhr
Goto Top
Hallo,

also es geht um folgendes:

Ich möchte im JPG Ordner jeweils Ordner mit Bildern haben. Die Anzahl der Bilder und Ordner mit Bildern kann variieren. Diese Bilder möchte ich anhand dieses Tools in PDF Dateien umwandeln, dessen Name dann der Ordnername ist. Ich kann dafür garantieren, dass es jeweils nur einen Unterordner gibt in JPG.

Ich glaube zum besseren Verständnis kannst du mal folgendes herunterladen und probieren, wie ich das meine. Einfach entpacken und bitte noch
von hier das in den APP ordner entpacken: http://www.compulsivecode.com/Project_ImageToPDF.aspx
Hier kannst du das herunterladen: https://workupload.com/file/34r9pnBEJSJ

Ich kriege nur hin, dass die letzte letzen beiden Bilder zu einer PDF werden. Ich verstehe nicht wie man mit Unique die Duplikate entfernen kann.
Mitglied: lcer00
Lösung lcer00 13.02.2021 um 20:25:23 Uhr
Goto Top
Hallo,

also runterladen wird hier sicher niemand irgendwas.

Lies mal Example 7 aus https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...

Grüße

lcer
Mitglied: wovokim
wovokim 13.02.2021 um 20:56:37 Uhr
Goto Top
Danke! Ich habe nur eine einzelnen Befehl gebraucht damit es funktioniert. Keine Ahnung wie das ging. Jetzt funktioniert es ohne Probleme.


Hier ist der Code wie er perfekt funktioniert, falls jemand das benutzen will:


$parent = (Get-Item -Path '.\' -Verbose).FullName  

#Path to your ImageToPDFFor.exe
$tool = $parent + '\ImageToPDForXPS.exe'  

#Directory containing the .JPG files that will be converted
$inputDir = $parent + '\JPG\'  

#Output path where the PDF files will be saved
$outputDir = $parent + '\Output\'  

#This will get all the files in the jpg directory
$jpgs = get-childitem $inputDir -recurse | where {$_.Extension -match "jpg"}  



foreach ($jpg in $jpgs)
{

    $inputpath = Split-Path -Path $jpg.FullName
    #Write-Output ($inputpath)
    $inputpathcorrected = $inputpath + "\*"   
    #Write-Output ($inputpathcorrected)
    
    $outputpdf = Split-Path (Split-Path $jpg.FullName -Parent ) -Leaf  
    #Write-Output ($outputpdf)
    $outputpdfcorrected =$outputDir + $outputpdf + ".pdf"   
    #Write-Output ($outputpdfcorrected) 

    if(test-path $outputpdfcorrected)
    {
        #"PDF alread exists " + $jpg 
    }
    else        
    {
    & $tool $outputpdfcorrected $inputpathcorrected |Sort-Object -Unique
    }

}
EXIT
Mitglied: lcer00
lcer00 13.02.2021 um 21:04:19 Uhr
Goto Top
Hallo,

also das kann ich so nicht stehen lassen. Das Problem der Duplikate hast Du durch die if Abfrage gelöst. Auch eine Möglichkeit.
Das Sort-Objekt am Ende ist völlig überflüssig und wird nirgendwo ausgewertet. Das kannst Du samt | löschen.

Grüße

lcer
Mitglied: wovokim
wovokim 13.02.2021 um 21:15:38 Uhr
Goto Top
"Das kannst Du samt | löschen."


Eben nicht. Genau das hat dafür gesorgt, dass die Dateien nur einmal in den Parameter genommen werden. Ich habe aber ehrlich gesagt keine Ahnung wie das funktioniert, aber genau das hat das Problem gelöst. Und ich habe die Parameter in die Schleife reingetan.

Die If Abfrage war nur deshalb nötig, weil er jeweils immer die PDF Datei erstellt hat, nachdem die Iteration fertig war.
Das heißt in meinem Beispiel: Mein Unterordner hat 50 Bilder. Er erstellt die PDF 50 Mal von neu, obwohl sie beim ersten Mal fertig war.
Jetzt prüft er, ob die PDF im Ordner ist und überspringt den Punkt.

Aber danke nochmals.