Como posso virar / girar um PrintDocument em .NET?
-
06-07-2019 - |
Pergunta
Eu tenho um documento que eu quero ser virado / rotação de 180 graus quando impresso. (Isto é devido à orientação do papel de etiqueta na impressora).
Há uma PrintDocument.PrinterSettings.LandscapeAngle
propriedade, mas é somente leitura.
Eu acho que esta propriedade é influenciada pelo driver de impressora e, portanto, não 'ajustável'.
Existe uma maneira agradável i pode girar a impressão em 180 graus sem ter que fazer qualquer coisa muito desagradável?
Solução
Eu acho que depende do que você define como sendo "nada muito desagradável": -)
O PrintDocument classe tem um Gráficos objeto que você pode usar para isso, que em por sua vez, tem um TranslateTransform e método RotateTransform que lhe permitirá fazer as coisas onde você precisa deles para ser.
É muitas vezes vale a pena dar uma cópia do objeto gráfico antes de manipulá-lo para que você possa restaurá-lo de volta quando terminar.
Outras dicas
imprimir um formulário e os falhanços / girar um PrintDocument em VB.NET e DefaultPageSettings definida como Paisagem
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
você já tentou antes de atribuir à impressora GDI girar a imagem que eu? isso é o que eu fiz:
_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;
}