如何在.NET中翻转/旋转PrintDocument?

问题描述:

我有一个文档,打印时我想翻转180度。 (这是由于打印机中标签纸的方向)。如何在.NET中翻转/旋转PrintDocument?

有一个属性PrintDocument.PrinterSettings.LandscapeAngle但它是只读的。

我觉得这个属性受打印机驱动程序的影响,因此不是'settable'。

有没有一种很好的方式可以将打印件旋转180度,而不必做太恶劣的事情?

我想这取决于你定义为“任何过于肮脏” :-)

PrintDocument类有一个Graphics对象,你可以使用这个,这反过来又一个TranslateTransformRotateTransform方法,可以让你得到你需要的东西。

在处理图形对象之前,通常需要获取图形对象的副本,以便在完成后再次将其恢复。

+1

但我想它180度的景观什么的。 – 2009-01-09 21:02:18

+0

难道你不能只是把周围的标签库存? – 2009-01-09 21:55:24

是否在将其分配给打印机之前尝试过?GDI是否将图像自行旋转?这就是我所做的:

   _currentPage = Image.FromStream((MemoryStream)_queue.Dequeue()); 
       pageHeight = _currentPage.Height; 
       pageWidth = _currentPage.Width; 

       if (pageHeight < pageWidth) 
       { 
        _currentPage.RotateFlip(RotateFlipType.Rotate90FlipNone); 
        pageHeight = _currentPage.Height; 
        pageWidth = _currentPage.Width;      

       } 

打印的格式,并翻转/旋转VB.NET化PrintDocument并设置DefaultPageSettings景观

Dim WithEvents mPrintDocument As New PrintDocument 
Dim mPrintBitMap As Bitmap 
Private Sub m_PrintDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles mPrintDocument.PrintPage 
    mPrintBitMap.RotateFlip(RotateFlipType.Rotate90FlipNone) 
    mPrintDocument.PrinterSettings.DefaultPageSettings.Landscape = True 
    ' Draw the image centered.  
    Dim lWidth As Integer = e.MarginBounds.X + (e.MarginBounds.Width - mPrintBitMap.Width) \ 2 
    Dim lHeight As Integer = e.MarginBounds.Y + (e.MarginBounds.Height - mPrintBitMap.Height) \ 2 

    e.Graphics.DrawImage(mPrintBitMap, lWidth, lHeight) 
    ' There's only one page. 
    e.HasMorePages = False 
End Sub 
Private Sub B_print_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_print.Click 
    ' Copy the form image into a bitmap.  
    mPrintBitMap = New Bitmap(Me.Width, Me.Height) 
    Dim lRect As System.Drawing.Rectangle 
    lRect.Width = Me.Width 
    lRect.Height = Me.Height 
    Me.DrawToBitmap(mPrintBitMap, lRect) 
    ' Make a PrintDocument and print.  
    mPrintDocument = New PrintDocument 

    mPrintDocument.Print() 

End Sub