从纵向更改为横向PrintDocument / PrintPreview

时间:2014-11-13 13:52:25

标签: vb.net printdocument print-preview

我一直在阅读大量关于PrintPreviewDialog,PrintPreviewControl和PrintDocument的文档。一切都说我必须将Portrait / Lanscape位放入PrintDocument QueryPageSettings事件中,然后PrintPreviewDialog将从PrintDocument中获取设置。

我开始时:

    Private Sub PrintDocument1_QueryPageSettings(ByVal sender As Object, ByVal e As System.Drawing.Printing.QueryPageSettingsEventArgs) Handles PrintDocument1.QueryPageSettings
    Select Case mOrientation
        Case ePrinterOrientation.Landscape
            PrintDocument1.DefaultPageSettings.Landscape = True
        Case ePrinterOrientation.Portrait
            PrintDocument1.DefaultPageSettings.Landscape = False
    End Select
End Sub

这是我当前的代码

   Private Sub PrintDocument1_QueryPageSettings(ByVal sender As Object, ByVal e As System.Drawing.Printing.QueryPageSettingsEventArgs) Handles PrintDocument1.QueryPageSettings
    Select Case mOrientation
        Case ePrinterOrientation.Landscape
            Dim ps As New PaperSize("A4Landscape", 1169, 827)
            ps.PaperName = PaperKind.A4
            PrintDocument1.DefaultPageSettings.PaperSize = ps
            PrintDocument1.DefaultPageSettings.Landscape = True
        Case ePrinterOrientation.Portrait
            Dim ps As New PaperSize("A4Portrait", 827, 1169)
            ps.PaperName = PaperKind.A4
            PrintDocument1.DefaultPageSettings.PaperSize = ps
            PrintDocument1.DefaultPageSettings.Landscape = False
    End Select
End Sub

我也尝试将此代码放入PrintDocument1_BeginPrint事件中,这确实改变了PrintPreview的“窗口”,但PrintDocument的内容仍然保留了Portrait(所用“视图”的宽度保持不变)。 / p>

纵向模式跨越2页的10列,横向模式应该包含1页上的所有列,但事实并非如此,“PrintableArea”边距在现实中看起来保持完全相同,即使如果我逐步调试,数字会更改为正确的值。

我真的得到了这个,这种三向依赖,它应该比这简单。

编辑:

进一步解决这个问题。如果我打印文档,方向设置为横向,但打印边距(文档)仍然打印(有溢出),好像边距是纵向。

我真的需要解决这个问题。这是不可接受的。

2 个答案:

答案 0 :(得分:0)

而不是

PrintDocument1.DefaultPageSettings.Landscape = True

使用

e.PageSettings.Landscape = True

您要做的是在PrintDoc1_QueryPageSettings中更改事件的值:

System.Drawing.Printing.QueryPageSettingsEventArgs

答案 1 :(得分:0)

PaperSize("A4Landscape", 1169, 827)

应该是

PaperSize("A4Landscape", 827, 1169)

同样适用于肖像。