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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
2 Kommentare
Neuester Kommentar
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 ), deswegen hier noch für die Nachwelt nur für diesen speziellen Teil der Frage:
Grüße Uwe
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 ), 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
}
}