Как я могу перевернуть / повернуть PrintDocument в .NET? - PullRequest
3 голосов
/ 09 января 2009

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 24 августа 2012

распечатайте форму и переверните / поверните 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
2 голосов
/ 27 октября 2009

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

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

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

2 голосов
/ 09 января 2009
1 голос
/ 27 января 2010

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

                }
...