Powershell - PDF 1. Seite löschen
Hi zusammen,
ich benötige Hilfe bei folgender Problemstellung für Powershell:
In einem Ordner müssen bei allen PDF Dateien die erste Seite gelöscht werden.
Hintergrund ist folgender: Bei der ersten Seite handelt es sich um ein Versandblatt und muss entfernt werden.
Wäre super, wenn mir jemand auf die Sprünge helfen könnte.
Vielen Dank und beste Grüße
Baraban
ich benötige Hilfe bei folgender Problemstellung für Powershell:
In einem Ordner müssen bei allen PDF Dateien die erste Seite gelöscht werden.
Hintergrund ist folgender: Bei der ersten Seite handelt es sich um ein Versandblatt und muss entfernt werden.
Wäre super, wenn mir jemand auf die Sprünge helfen könnte.
Vielen Dank und beste Grüße
Baraban
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1899018742
Url: https://administrator.de/contentid/1899018742
Ausgedruckt am: 19.11.2024 um 19:11 Uhr
3 Kommentare
Neuester Kommentar
Servus.
Variante iTextSharp:
Variante PDFtk / Download der pdftk.exe hier: https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
Grüße Uwe
Variante iTextSharp:
# ------------------------------------------------------
# Pfad in dem die PDFs liegen
$pdfquelle = "D:\quelle"
# Ausgabeorder (hier werden die modfizierten Dateien abgelegt)
$pdfziel = "D:\ziel"
# ------------------------------------------------------
# Ausgabeordner erstellen falls er nicht existiert
if (!(Test-Path $pdfziel)){md $pdfziel -Force | out-null}
# Mindestens PS 3.0 erforderlich
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}
# Funktion zum Laden des iTextSharp Assemblies
function Load-iTextLibrary {
if($psscriptroot -ne ''){
$localpath = join-path $psscriptroot 'itextsharp.dll'
}else{
$localpath = join-path $env:TEMP 'itextsharp.dll'
}
$zip = $null;$tmp = ''
try{
if(!(Test-Path $localpath)){
# Accept all TLS protocols
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType])
Add-Type -A System.IO.Compression.FileSystem
$tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"
write-host "Downloading and extracting required 'iTextSharp.dll' ... " -F Green -NoNewline
(New-Object System.Net.WebClient).DownloadFile('https://www.nuget.org/api/v2/package/iTextSharp/5.5.13.1', $tmp)
$zip = [System.IO.Compression.ZipFile]::OpenRead($tmp)
$zip.Entries | ?{$_.Fullname -eq 'lib/itextsharp.dll'} | %{
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$localpath)
}
Unblock-File -Path $localpath
write-host "OK" -F Green
}
Add-Type -Path $localpath
}catch{
throw "Error: $($_.Exception.Message)"
}finally{
if ($zip){$zip.Dispose()}
if ($tmp -ne ''){del $tmp -Force -EA SilentlyContinue}
}
}
# iText Library laden
Load-iTextLibrary
[iTextSharp.text.pdf.PdfReader]::unethicalreading = $true
# Alle PDF-Dateien des Ordners rekursiv verarbeiten
foreach ($file in Get-ChildItem $pdfquelle -Filter *.pdf -File -recurse){
write-host "Verarbeite Datei '$($file.Fullname)' ..." -F Green -NoNewline
# Ziel festlegen
$targetpath = $file.DirectoryName -replace [regex]::escape($pdfquelle),$pdfziel
if (!(Test-Path $targetpath)){md $targetpath -Force | out-null}
$targetfile = join-path $targetpath $file.Name
try{
# PDF Reader Object erstellen
$reader = new-object iTextSharp.text.pdf.PdfReader $file.Fullname
# 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()
# alle Seiten bis auf die erste in Kopie übertragen
2..($reader.NumberOfPages) | %{
# Seite der Kopie hinzufügen
$copy.AddPage($copy.GetImportedPage($reader,$_))
}
# 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
write-host $_.Exception.Message -F Red
}
}
Variante PDFtk / Download der pdftk.exe hier: https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
$pdftk = "D:\pdftk\pdftk.exe"
$quelle = "D:\quelle"
$ziel = "D:\ziel"
if(!(Test-Path $ziel)){md $ziel -Force | out-null}
foreach($file in Get-ChildItem $quelle -File -Filter *.pdf ){
&$pdftk "`"$($file.Fullname)`"" "cat" "2-end" "output" "`"$ziel\$($file.Name)`""
}
Hi Baraban,
in diesem Forum habe ich bereits Mega-Hilfe erhalten und schaue, ob ich irgendwann auch mal etwas zurückgeben kann ... was hier natürlich gar nicht einfach ist!
Ich hatte ähnliche Probleme mit pdf's und bin nach sehr langer Suche auf eines, wie ich finde, richtig gutes Tool gestoßen: cmd, free, little, umfangreich ...
Damit könntest du dein Problem sogar in einem Einzeiler lösen, wie auch bei Uwe (nur noch in die Schleife bauen):
Hier findest du weitere Infos, wobei dir nach dem Download ein super Manual bereitgestellt wird. Soll heißen, auch ich als Dummy kam damit sehr schnell zurecht
cpdf
Good luck!
Grüße
okidoki
in diesem Forum habe ich bereits Mega-Hilfe erhalten und schaue, ob ich irgendwann auch mal etwas zurückgeben kann ... was hier natürlich gar nicht einfach ist!
Ich hatte ähnliche Probleme mit pdf's und bin nach sehr langer Suche auf eines, wie ich finde, richtig gutes Tool gestoßen: cmd, free, little, umfangreich ...
Damit könntest du dein Problem sogar in einem Einzeiler lösen, wie auch bei Uwe (nur noch in die Schleife bauen):
cpdf in.pdf 2-end -o out.pdf
Hier findest du weitere Infos, wobei dir nach dem Download ein super Manual bereitgestellt wird. Soll heißen, auch ich als Dummy kam damit sehr schnell zurecht
cpdf
Good luck!
Grüße
okidoki