spongebob24
Goto Top

Ersten 8 Stellen aus Filenamen per Powershell auf jede Seite von PDF drucken

Hallo Zusammen,

kann ich Powershell in Verbindung mit itextsharp verwenden, um die ersten 8 stellen eines Dateinamens auf jede Seite von einem PDF rechts oben ins Eck abdrucken zu lassen?

SG

Content-ID: 436007

Url: https://administrator.de/forum/ersten-8-stellen-aus-filenamen-per-powershell-auf-jede-seite-von-pdf-drucken-436007.html

Ausgedruckt am: 22.12.2024 um 21:12 Uhr

colinardo
Lösung colinardo 03.04.2019 aktualisiert um 16:59:21 Uhr
Goto Top
Servus,
du hast zwar schon den von mir angepassten Code erhalten (du konntest es wohl aber anscheinend nicht abwarten bis ich Zeit habe - Und falls du dich fragst, ja auch ich muss zwischendurch meine Kröten verdienen und kann nicht nur den ganzen Tag Skripte für lau schreiben face-wink), deswegen hier noch für die Nachwelt nur für diesen speziellen Teil der Frage:
# ------------------------------------------------------
# Pfad in dem die PDFs liegen
$pdfquelle = "D:\Pdf-Files"  
# Pfad zur iTextsharp DLL (per Default der Skriptordner, Download hier: https:{{comment_single_line_double_slash:0}}
$PATH_ITEXTSHARP = "$PSScriptRoot\itextsharp.dll"  
# ------------------------------------------------------

# Mindestens PS 3.0 erforderlich
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}    

# iTextSharp DLL laden
Add-Type -Path $PATH_ITEXTSHARP -EA Stop

# Font für Text festlegen
$font = [iTextSharp.text.pdf.BaseFont]::CreateFont([iTextSharp.text.pdf.BaseFont]::HELVETICA,[iTextSharp.text.pdf.BaseFont]::CP1252,[iTextSharp.text.pdf.BaseFont]::NOT_EMBEDDED)
# Schriftgröße festlegen
$fontSize = 10

# Alle PDF-Dateien des Skript-Ordners rekursiv verarbeiten, außer sie haben im Basename des Dateinamens am Ende ein '_barcode' 
gci $pdfquelle -Filter *.pdf -File -Recurse -PipelineVariable file | %{
    write-host "Verarbeite Datei '$($_.Fullname)' ..." -F Green -NoNewline  
    # Zieldateiname festlegen
    $targetfile = "$($_.DirectoryName)\$($_.Basename)_neu$($_.Extension)"  
    try{
        # PDF Reader Object erstellen
        $reader = new-object iTextSharp.text.pdf.PdfReader $_.Fullname
        [iTextSharp.text.pdf.PdfReader]::unethicalreading = $true
        # document objekt erstellen
        $doc = [iTextSharp.text.Document]::new()
        # Kopie des PDFs im Ausgabeordner erstellen
        $copy = [iTextSharp.text.pdf.PdfCopy]::new($doc,([System.IO.FileStream]::new($targetfile,[System.IO.FileMode]::Create,[System.IO.FileAccess]::Write)))
        # Dokument für die Bearbeitung öffen
        $doc.Open()
        
        
        # Text auf jede Seite des PDFs oben rechts schreiben
        1..($reader.NumberOfPages) | %{           
            # Original Seite holen
            $p = $copy.GetImportedPage($reader,$_)
            # create stamp
            $stamp = $copy.CreatePageStamp($p)
            # byte content des stamps holen
            $bc = $stamp.GetOverContent()
            # Die ersten 8 Zeichen des Dateinamens in Variable speichern
            $str = $file.Name.Substring(0,8)

            # Testfarbe und Font festlegen           
            $bc.SetColorFill([iTextSharp.text.BaseColor]::BLACK)
            $bc.SetFontAndSize($font,$fontSize)

            # Text oben rechts auf der Seite platzieren
            $bc.BeginText()
            $bc.ShowTextAligned(1,$str,$p.Width - 50 ,$p.Height - 20,0)
            $bc.EndText()
            
            # Stamp aktualisieren
            $stamp.AlterContents()

            # Seite der Kopie hinzufügen
            $copy.AddPage($p)
        }
        # Handles zu den Objekten schließen
        $copy.Close()
        $copy.Dispose()
        $doc.Close()
        $doc.Dispose()
        $reader.Close()
        $reader.Dispose()
        write-host "OK." -F Green  
    }catch{
        # Error zeige Fehler
        throw $_.Exception.Message
    }
}
Grüße Uwe
spongebob24
spongebob24 08.04.2019 um 10:18:45 Uhr
Goto Top
Sorry hat sich wohl überschnitte, ich habe einfach eine Weile selber rumgebastelt und da hat mir dieser Teil noch gefehlt.

Ich weiss das jeder seine Kröten verdienen muss face-wink
Falls dies falsch rübergekommen ist Sorry dafür.

Danke für das Script.

SG