Pregunta

Tengo un documento que deseo que se voltee / gire 180 grados cuando se imprima. (Esto se debe a la orientación del stock de etiquetas en la impresora).

Hay una propiedad PrintDocument.PrinterSettings.LandscapeAngle pero es de solo lectura.

Creo que esta propiedad está influenciada por el controlador de la impresora y, por lo tanto, no es "configurable".

¿Hay alguna forma agradable de rotar la impresión 180 grados sin tener que hacer nada demasiado desagradable?

¿Fue útil?

Solución

Supongo que eso depende de lo que definas como "algo demasiado desagradable" :-)

La clase PrintDocument tiene una Gráficos objeto que puede utilizar para esto, que en turn tiene un TranslateTransform y método RotateTransform que le permitirá obtener cosas donde usted Necesito que sean.

A menudo vale la pena tomar una copia del objeto gráfico antes de manipularlo para poder restaurarlo nuevamente cuando haya terminado.

Otros consejos

imprima un formulario y voltee / gire un PrintDocument en VB.NET y establezca DefaultPageSettings en horizontal

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

¿Has probado antes de asignarlo a la impresora GDI rotar la imagen por sí mismo? eso es lo que hice:

                _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;                      

                }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top