2

我正在尝试使用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

完整代码可以在这个 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
4

4 回答 4

1

尝试在 PrintPage 函数中使用 e.graphics.VisibleClipBounds 作为可打印页面大小。正如汉斯所说,最好不要在打印前调整图像大小。

于 2011-09-26T23:22:57.810 回答
1

您必须使用MarginBounds

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)))
于 2014-01-04T08:15:03.187 回答
0

听起来您想要打印大多数个人打印机无法做到的全出血页面。正如上面提到的评论之一,考虑边距以将图像重新调整为适当的大小。

于 2011-09-26T14:57:14.047 回答
0

我没有找到解决这个问题的方法。我通过在执行打印预览时使用打印机边距并在实际打印时忽略边距(从 0,0 原点开始)来解决它。我相信这可能是打印机驱动程序中的错误?但我无法确认。

于 2011-10-11T13:28:13.557 回答