Pdfs je nach Größe an unterschiedliche Drucker senden
Hallo zusammen,
ich bin auf meiner Suche im Internet auf dieses Forum gestoßen, vielleicht könnt ihr mir ja weiterhelfen ...
Ich habe folgendes Problem:
In einem Ordner liegen einige pdf-Dateien, die in unterschiedlichen Papierformaten abgespeichert sind.
Ich möchte diese pdf's automatisch in A4 bzw. A3 drucken.
Mein "Batch" sollte jede pdf nach der Reihe "untersuchen", welches Papierformat (Größe) in den Eigenschaften eingetragen ist.
Je nachdem welche Größe erkannt wurde (A4-> auf A4 Drucker. A3,A2,A1,A0 -> auf A3 Drucker), sollten diese Dateien an den richtigen Drucker gesendet werden.
Ich habe im Internet gesucht und bin u.a. auf "PDF Papierformat ermitteln (per Batch)" gestoßen.
Die pdfinfo.exe habe ich mir bereits heruntergeladen.
Ebenso bin ich auf ein Batch gestoßen, mit dem man alle Dokumente in einem Ordner drucken kann, allerdings nur mit dem Standarddrucker.
Kann mir von euch jemand weiterhelfen?
Ich arbeite mit Win7 (64)
Ich bin ziemlicher Anfänger im Batch- und Programmierbereich ...
Freundliche Grüße, ein verzweifelter PC-User
ich bin auf meiner Suche im Internet auf dieses Forum gestoßen, vielleicht könnt ihr mir ja weiterhelfen ...
Ich habe folgendes Problem:
In einem Ordner liegen einige pdf-Dateien, die in unterschiedlichen Papierformaten abgespeichert sind.
Ich möchte diese pdf's automatisch in A4 bzw. A3 drucken.
Mein "Batch" sollte jede pdf nach der Reihe "untersuchen", welches Papierformat (Größe) in den Eigenschaften eingetragen ist.
Je nachdem welche Größe erkannt wurde (A4-> auf A4 Drucker. A3,A2,A1,A0 -> auf A3 Drucker), sollten diese Dateien an den richtigen Drucker gesendet werden.
Ich habe im Internet gesucht und bin u.a. auf "PDF Papierformat ermitteln (per Batch)" gestoßen.
Die pdfinfo.exe habe ich mir bereits heruntergeladen.
Ebenso bin ich auf ein Batch gestoßen, mit dem man alle Dokumente in einem Ordner drucken kann, allerdings nur mit dem Standarddrucker.
Kann mir von euch jemand weiterhelfen?
Ich arbeite mit Win7 (64)
Ich bin ziemlicher Anfänger im Batch- und Programmierbereich ...
Freundliche Grüße, ein verzweifelter PC-User
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 288834
Url: https://administrator.de/contentid/288834
Ausgedruckt am: 25.11.2024 um 22:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Gang13, Willkommen auf Administrator.de!
Das gewünschte könntest du z.B. mit folgendem Powershell-Script erledigen. Die Variablen die anzupassen sind stehen in den ersten kommentierten Zeilen.
Das Skript nimmt alle PDF Dateien (*.pdf) eines Ordners, extrahiert mit der pdfinfo.exe die Seitengröße der Dateien, Gruppiert dann die Dateien nach <=A4 und >A4 und schickt diese Dateien dann an den entsprechend angegebenen Drucker. (Zur Info: Die Dateien werden mit der Default-App welche für PDF-Dateien auf dem OS eingetragen ist gedruckt, es sollte also eine solche eingerichtet sein, z.B. Adobe Reader/Acrobat). Nach Verarbeitung werden die Dateien in einen Ablage-Ordner verschoben.
Bitte habe Verständnis das wir hier nicht jedem einen Anfänger-Kurs in Powershell geben können, dazu gibt es genügend Tutorials im Netz.
Für weiteren Support zum Skript stehe ich gerne zur Verfügung . Dieser ist dann jedoch kostenpflichtig.
Bei Interesse kannst du mich dann gerne via PM kontaktieren.
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Das gewünschte könntest du z.B. mit folgendem Powershell-Script erledigen. Die Variablen die anzupassen sind stehen in den ersten kommentierten Zeilen.
Das Skript nimmt alle PDF Dateien (*.pdf) eines Ordners, extrahiert mit der pdfinfo.exe die Seitengröße der Dateien, Gruppiert dann die Dateien nach <=A4 und >A4 und schickt diese Dateien dann an den entsprechend angegebenen Drucker. (Zur Info: Die Dateien werden mit der Default-App welche für PDF-Dateien auf dem OS eingetragen ist gedruckt, es sollte also eine solche eingerichtet sein, z.B. Adobe Reader/Acrobat). Nach Verarbeitung werden die Dateien in einen Ablage-Ordner verschoben.
# Pfad zur pdfinfo.exe
$pdfinfo = 'D:\Tools\pdfinfo.exe'
# Ordner der die PDFs enthält
$source = 'D:\Quelle'
# Ordner in den die PDFs nach dem Druck verschoben werden
$target = "D:\Ziel"
# A4 Printer
$printerA4 = "HP Officejet A4"
# A3 Printer
$printerA3 = "HP Officejet A3"
# ============================
# Funktion die die Seitengrößen des PDFs ausliest
function Add-PageSize(){
param(
[parameter(mandatory=$true,ValueFromPipeline=$true)]$fileItem
)
process{
if ($fileItem.Extension -eq '.pdf'){
try{
$sizes = [regex]::Match((& $pdfinfo $fileItem.FullName | out-string),'(?im)^Page size:\s*([\d\.]*) x ([\d\.]*)')
$width = [int]([double]$sizes.Groups[1].Value * 0.352778)
$height = [int]([double]$sizes.Groups[2].Value * 0.352778)
$fileItem | Add-Member -MemberType NoteProperty -Name 'Seitenbreite' -Value $width
$fileItem | Add-Member -MemberType NoteProperty -Name 'Seitenhöhe' -Value $height
}catch{}
}
$fileitem
}
}
# Druckfunktion
function Print-PDF {
param(
[parameter(mandatory=$true,ValueFromPipelineByPropertyName=$true)][Alias("Fullname")][ValidateNotNullOrEmpty()][string[]]$files,
[ValidateScript({(gwmi Win32_Printer -Filter "Name='$_'")})][string]$printer,
[parameter(ParameterSetname="A")][switch]$DeleteAfterPrint,
[parameter(ParameterSetname="B")][switch]$MovePDF,
[parameter(Mandatory=$true,ParameterSetname="B")][ValidateScript({Test-Path $_})]$Destination
)
begin{
# set printer
if ($printer -ne ''){
# store original printer
$originalPrinter = gwmi Win32_Printer -Filter "Default='true'"
# set default printer temporarily to defined printer
[void](gwmi Win32_Printer -Filter "Name='$printer'").SetDefaultPrinter()
}
# function to check file lock state
$CheckFileStatus = {
param([string]$filePath)
try{
$fileStream = (New-Object System.IO.FileInfo $filePath).OpenWrite()
$fileStream.Close(); $fileStream.Dispose()
# file is not locked by another process
return $true
}catch{
# file is locked
return $false
}
}
$pdfAppID = $null
}
process{
$files | %{
write-host "Printing document: '$_' ..." -ForegroundColor Green
# start printing pdf with default print-handler in the system
$pdfApp = (start-process $_ -Verb "print" -PassThru).ProcessName
# sleep time / increase this parameter in case files get not printed
sleep(3)
# check file-lock-status in loop until it's free
while(!(&$CheckFileStatus $_)){sleep(1)}
# delete file if desired by user
if ($DeleteAfterPrint.IsPresent){
write-host "Deleting document: '$_' ..." -ForegroundColor Yellow
del $_ -Force
}
if ($MovePDF.IsPresent){
write-host "Moving document '$_' to : '$Destination' ..." -ForegroundColor Yellow
move-item $_ -Destination $Destination -Force
}
}
}
end{
# kill pdf viewer process
get-process $pdfApp -EA SilentlyContinue | Stop-Process
if ($printer -ne ''){
#restore original default printer
[void]$originalPrinter.SetDefaultPrinter()
}
}
}
# Seiteninfos extrahieren und nach <=A4 und >A4 gruppieren
$pagegroups = gci $source | Add-PageSize -ErrorAction SilentlyContinue | group {($_.Seitenbreite * $_.Seitenhöhe) -le 62370}
# Seiten an A4 Drucker senden
$pagegroups | ?{$_.Name -eq $true} | select -Expand Group | Print-PDF -printer $printerA4 -MovePDF -Destination $target
# Seiten an A3 Drucker senden
$pagegroups | ?{$_.Name -eq $false} | select -Expand Group | Print-PDF -printer $printerA3 -MovePDF -Destination $target
Für weiteren Support zum Skript stehe ich gerne zur Verfügung . Dieser ist dann jedoch kostenpflichtig.
Bei Interesse kannst du mich dann gerne via PM kontaktieren.
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Moin @colinardo(Uwe),
find ich echt gut das Skript, läuft hier wie Schmidts Katze! Danke dafür, kann ich bei einem Kunden gut gebrauchen.
Eine Spende ist unterwegs, denn das hat mir einige Programmierarbeit erspart
VIELEN DANK!!
Schönes Wochenende
Gruß jodel32
find ich echt gut das Skript, läuft hier wie Schmidts Katze! Danke dafür, kann ich bei einem Kunden gut gebrauchen.
Eine Spende ist unterwegs, denn das hat mir einige Programmierarbeit erspart
VIELEN DANK!!
Schönes Wochenende
Gruß jodel32