Вопрос

У меня есть документ, который я хочу перевернуть / повернуть на 180 градусов при печати. (Это связано с ориентацией этикеток в принтере).

Существует свойство PrintDocument.PrinterSettings.LandscapeAngle , но оно доступно только для чтения.

Я думаю, что это свойство зависит от драйвера принтера и поэтому не может быть установлено.

Есть ли хороший способ повернуть отпечаток на 180 градусов без необходимости делать что-то слишком неприятное?

Это было полезно?

Решение

Я полагаю, это зависит от того, что вы определяете как "что-то слишком неприятное" : -)

класс PrintDocument имеет графический объект , который вы можете использовать для этого, который в в свою очередь есть TranslateTransform и метод RotateTransform , который позволит вам получить вещи там, где вы нужно, чтобы они были.

Часто стоит взять копию графического объекта, прежде чем манипулировать им, чтобы вы могли восстановить его снова, когда закончите.

Другие советы

распечатайте форму, переверните / поверните PrintDocument в VB.NET и установите 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

Вы пробовали, прежде чем назначить его на принтер 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;                      

                }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top