我正在尝试使用PrintDocument
将图像(从文件)打印到打印机。
我正在重新调整我的图像大小,以便在我打印时将其缩放为打印输出的整页图像被轻微裁剪。
编辑2
我我使用边距来计算要使用的区域:
With printSettings.DefaultPageSettings
Dim areaWidth As Single = .Bounds.Width - .Margins.Left - .Margins.Right
Dim areaHeight As Single = .Bounds.Height - .Margins.Top - .Margins.Bottom
End With
页面的边界是1169x827(A4),边距是1137x795。
调整大小后,我的图片大小为1092x682,我使用以下代码绘制它:
e.Graphics.DrawImage(printBitmap, .Margins.Left, .Margins.Top)
令人讨厌的是,当我打印到PrintPreviewDialog时,它被完美缩放,但是当我将完全相同的代码打印到实际的打印机时它不适合。
编辑3
可在this url找到完整代码 用法:
Dim clsPrint As New clsPrinting
With clsPrint
.Landscape = True
.SetMinimumMargins()
If .ShowPrintDialog Then
.Documentname = "Some doc name"
.Preview = False 'When True shows ok
.PrintImage("filename of a png file")
End If
End With
答案 0 :(得分:1)
尝试在PrintPage函数中使用e.graphics.VisibleClipBounds作为可打印页面大小。正如汉斯所说,最好不要在打印前调整图像大小。
答案 1 :(得分:1)
您必须使用MargiBounds
:
C#
中的:
e.Graphics.DrawImage(your_image, e.MarginBounds);
C++/CLI
中的:
e->Graphics->DrawImage(your_image, e->MarginBounds);
注意:如果您的图像没有相同的宽高比,则需要进行调整。在此示例中,图像的宽度超出了页面宽度:
Dim adjustment As Double = img.Width / e.MarginBounds.Width
e.Graphics.DrawImage(img, New Rectangle(New Point(0, 0), New Point(img.Width / adjustment, img.Height / adjustment)))
答案 2 :(得分:0)
听起来您想要打印一个大多数个人打印机无法使用full bleed的页面。正如上面提到的评论之一,将图像重新调整到适当大小的边距。
答案 3 :(得分:0)
我没有找到解决这个问题的方法。我在执行打印预览时使用打印机边距并在实际打印时忽略边距(从0,0起点开始)来解决这个问题。我相信这可能是打印机驱动程序中的一个错误?但我无法证实。