Domanda

Ho un documento che voglio essere capovolto / ruotato di 180 gradi quando viene stampato. (Ciò è dovuto all'orientamento dello stock di etichette nella stampante).

Esiste una proprietà PrintDocument.PrinterSettings.L landscapeAngle ma è di sola lettura.

Penso che questa proprietà sia influenzata dal driver della stampante e quindi non 'settabile'.

C'è un bel modo in cui posso ruotare la stampa di 180 gradi senza dover fare nulla di troppo brutto?

È stato utile?

Soluzione

Immagino che dipende da ciò che definisci "qualcosa di troppo brutto" : -)

La classe PrintDocument ha una Graphics che puoi utilizzare per questo, che in turn ha un TranslateTransform e metodo RotateTransform che ti permetterà di portare le cose dove vuoi bisogno che siano.

Spesso vale la pena prendere una copia dell'oggetto grafico prima di manipolarlo in modo da poterlo ripristinare nuovamente quando hai finito.

Altri suggerimenti

stampa un modulo e capovolgi / ruota un oggetto PrintDocument in VB.NET e imposta DefaultPageSettings su landscape

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

hai provato prima di assegnarlo alla stampante GDI ruotare l'immagine da solo? questo è quello che ho fatto:

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

                }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top