У меня есть функция powershell, собранная из онлайн-источников с несколькими собственными модификациями. Он берет изображение для печати, изменяет размер до размера страницы принтера и печатает его.
Эта функция работает нормально, но я пытаюсь печатать штрих-коды на этикетках, которые требуют печати с высоким разрешением. Я могу изменить разрешение задания по умолчанию, изменив $doc.DefaultPageSettings.PrinterResolution
, и могу сказать, что это применимо к каждой странице через мои различные выходные данные.
Однако разрешение страницы фактически не меняется. Размер страницы по умолчанию при низком DPI составляет 109x350 (от $pageBounds = $_.MarginBounds
). Я изменяю выходной DPI, и это значение остается неизменным;Я ожидаю, что это повысится до 300x1000 для 300 точек на дюйм.
function print-image {
param([string]$imageName = $(throw "Enter image name to print"),
[string]$printer = "",
[bool]$fitImageToPaper = $true)
trap { break; }
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# Bitmap image to use to print image
$bitmap = $null
$doc = new-object System.Drawing.Printing.PrintDocument
# if printer name not given, use default printer
if ($printer -ne "") {
$doc.PrinterSettings.PrinterName = $printer
}
$doc.DefaultPageSettings.PrinterResolution = $doc.PrinterSettings.PrinterResolutions[5]
$doc.DefaultPageSettings.Margins = new-object System.Drawing.Printing.Margins(0,0,0,0);
#$doc.OriginAtMargins = $true
$doc.DocumentName = [System.IO.Path]::GetFileName($imageName)
$doc.add_BeginPrint({
Write-Host "==================== $($doc.DocumentName) ===================="
})
# clean up after printing...
$doc.add_EndPrint({
if ($bitmap -ne $null) {
$bitmap.Dispose()
$bitmap = $null
}
Write-Host "xxxxxxxxxxxxxxxxxxxx $($doc.DocumentName) xxxxxxxxxxxxxxxxxxxx"
})
# Adjust image size to fit into paper and print image
$doc.add_PrintPage({
Write-Host "Printing $imageName..."
$g = $_.Graphics
$pageBounds = $_.MarginBounds
$img = new-object Drawing.Bitmap($imageName)
Write-Host $_
Write-Host $_.PageSettings
Write-Host $_.MarginBounds
Write-Host $_.PageBounds
$adjustedImageSize = $img.Size
$ratio = [double] 1;
# Adjust image size to fit on the paper
if ($fitImageToPaper) {
$fitWidth = [bool] (($img.Size.Width/[math]::abs($_.MarginBounds.Width)) > ($img.Size.Height/[math]::abs($_.MarginBounds.Height)))
if (($img.Size.Width -le $_.MarginBounds.Width) -and
($img.Size.Height -le $_.MarginBounds.Height)) {
$adjustedImageSize = new-object System.Drawing.SizeF($img.Size.Width, $img.Size.Height)
} else {
if ($fitWidth) {
Write-Host "Fit Width"
$ratio = [double] [math]::abs($_.MarginBounds.Width / $img.Size.Width);
$adjustedImageSize = new-object System.Drawing.SizeF($_.MarginBounds.Width, [float]($img.Size.Height * $ratio))
} else {
Write-Host "Fit Height"
$ratio = [double] [math]::abs($_.MarginBounds.Height / $img.Size.Height)
$adjustedImageSize = new-object System.Drawing.SizeF([float]($img.Size.Width * $ratio), $_.MarginBounds.Height)
}
}
}
Write-Host $adjustedImageSize
Write-Host $img
# calculate destination and source sizes
$recDest = new-object Drawing.RectangleF(0, 0, $adjustedImageSize.Width, $adjustedImageSize.Height )
$recSrc = new-object Drawing.RectangleF(0, 0, $img.Width, $img.Height)
# Print to the paper
$_.Graphics.DrawImage($img, $recDest, $recSrc, [Drawing.GraphicsUnit]"Pixel")
$_.HasMorePages = $false; # nothing else to print
})
Write-Host "xxxxxxxxxxxxxxxxxxxx $($doc.DocumentName) xxxxxxxxxxxxxxxxxxxx"
$doc.Print()
}