调整图像大小以适应打印页面

时间:2011-09-26 08:31:19

标签: c# .net vb.net printing printdocument

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

4 个答案:

答案 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起点开始)来解决这个问题。我相信这可能是打印机驱动程序中的一个错误?但我无法证实。