spongebob24

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
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

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: 17.07.2025 um 00:07 Uhr

colinardo
Lösung colinardo 03.04.2019 aktualisiert um 16:59:21 Uhr
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
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