none
PrintPreviewControl中预览的内容为什么与打印的结果不一致 WinForm,vb2008 RRS feed

答案

全部回复

  • 预览和打印的打印机纸张设置是不是一样的?

    2008年5月27日 4:24
    版主
  • form_load事件,设置DOCUMENT的纸张大小和方向

    '默认背景文件路径
            sFileName = Application.StartupPath + "/Images/Cert/Home.jpg"
            '
            Dim ps As PaperSize = Nothing

            For Each pkSize As PaperSize In PDoc.PrinterSettings.PaperSizes
                If pkSize.PaperName.Equals("Envelope C5") Then ps = pkSize
            Next

            PDoc.DefaultPageSettings.PaperSize = ps
            PDoc.DefaultPageSettings.Landscape = True
    '纸张设为横向

     

     

    Document的PRINT事件:

      '输出考生的信息到页面上
            Dim sMsg As String

            '定位的X值与定位的Y值的比例是:51.048,即每厘米=51.048;
            '1英寸=25.4mm

            Dim drawFont As New Font("宋体", 16)
            Dim iX As Single = 0, iY As Single = 0

            '画背景,预览模式下有,打印模式下无
            If printMode = MyPrintMode.Preview Then
                '因为纸张是横向的,因此下面绘出合格证底图的矩形框的宽=纸张的高,高=纸张的宽
                Try
                    Dim rect As New Rectangle(0, 0, PDoc.DefaultPageSettings.PaperSize.Height, PDoc.DefaultPageSettings.PaperSize.Width)
                    g.DrawImage(Image.FromFile(sFileName), rect)
                Catch ex As IO.FileNotFoundException
                    MsgBox(ex.Message)
                End Try
            End If

            '设定绘图单位
            g.PageUnit = GraphicsUnit.Millimeter
            '输出内容
            Dim sFzrq As String = "2008年5月25日"
            iX = 30
            iY = 102 - 1.5 * PDoc.DefaultPageSettings.HardMarginX * 0.254 'Int(10.2 * 51.048)
            g.DrawString(sFzrq, drawFont, Brushes.Black, iX, iY)

    ........'输出其它内容

     

    因为是有背景的,所以从背景图片的大小就可以看出来打印结果是否一致,

    其结果是:

    背景图打印的不完整

    2008年5月27日 5:20
  • 应该要减去页边距吧

     

    PageSettings.Margins 属性
    2008年5月27日 6:05
    版主
  •  

     

       

    Code Snippet

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            PPC.Document = PDoc


            For Each psize As System.Drawing.Printing.PaperSize In PDoc.PrinterSettings.PaperSizes
                If psize.PaperName = "A4" Then PDoc.DefaultPageSettings.PaperSize = psize : Exit For
            Next

     

        End Sub

     

        Private Sub PDoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PDoc.PrintPage
            '输出MARGINS的值
            Label1.Text = "margins.left=" + PDoc.DefaultPageSettings.Margins.Left.ToString + vbNewLine
            Label1.Text += "margins.right=" + PDoc.DefaultPageSettings.Margins.Right.ToString + vbNewLine
            Label1.Text += "margins.top=" + PDoc.DefaultPageSettings.Margins.Top.ToString + vbNewLine
            Label1.Text += "margins.bottom=" + PDoc.DefaultPageSettings.Margins.Bottom.ToString + vbNewLine

            Label1.Text += "页设置:" + PDoc.DefaultPageSettings.PaperSize.PaperName

            '画一个框
            Dim rect As New Rectangle
            rect.X = PDoc.DefaultPageSettings.Margins.Left
            rect.Y = PDoc.DefaultPageSettings.Margins.Top
            rect.Width = PDoc.DefaultPageSettings.PaperSize.Width - PDoc.DefaultPageSettings.Margins.Left - PDoc.DefaultPageSettings.Margins.Right
            rect.Height = PDoc.DefaultPageSettings.PaperSize.Height - PDoc.DefaultPageSettings.Margins.Top - PDoc.DefaultPageSettings.Margins.Bottom

     

            e.Graphics.DrawRectangle(Pens.Black, rect)
        End Sub

     

        Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click
            PPC.InvalidatePreview()
        End Sub

     

        Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
            PDoc.Print()
        End Sub

     

     

     

    版主你好,我又按如上作了一个测试工程:

    在窗体的加载事件中设置了PDOC的纸张大小,并在绘 图事件中输出,其与设置的一致;

    其MARGINS.LEFT,RIGHT,TOP,BOTTOM的值输出均为100,在预览中与我想象的一致,但打印以后,明显示偏到了右边,也就是整个输出内容向右下方移了,使用的是HP1020激光打印机

     

    其形状大致如下Sad打印出来的上边距和左边距大,右边距和下边距小)

    ------------------------------------

    |       ------------------------    |

    |       |                       |    |

    |       |                       |    |

    |       |                       |    |

    |       |                       |    |

    |       |                       |    |

    |       |                       |    |

    |       ------------------------     |

    |-----------------------------------|

     

    2008年5月27日 6:49
  •  

    我明白了,我又测试了一下,代码做了如下改变:

     

     

    Code Snippet

    Dim rect As New Rectangle
            rect.X = PDoc.DefaultPageSettings.Margins.Left - PDoc.DefaultPageSettings.HardMarginX
            rect.Y = PDoc.DefaultPageSettings.Margins.Top - PDoc.DefaultPageSettings.HardMarginY

     

     

    也就是说在打印时,减去其打印机的硬边距就可以了,而在预览时,是不存在硬边距的,不知是否正确,还请你指教。

     

    总之,我现在的代码打出来,这个方框在中间了。

    2008年5月27日 6:53
  •  

    因为这里不能粘图,所以我将我的理解放到这片博客了,如果大家有需要的时候,可以参考一下

     

    http://wuxs2004.blog.sohu.com/88565701.html
    2008年5月27日 8:58