2009-01-09 9 views
3

J'ai un document que je veux être retourné/tourné de 180 degrés lors de l'impression. (Cela est dû à l'orientation du stock d'étiquettes dans l'imprimante).Comment retourner/faire pivoter un document PrintDocument dans .NET?

Il existe une propriété PrintDocument.PrinterSettings.LandscapeAngle mais elle est en lecture seule.

Je pense que cette propriété est influencée par le pilote de l'imprimante et n'est donc pas configurable.

Y at-il une bonne façon de faire pivoter l'impression de 180 degrés sans avoir à faire quelque chose de trop méchant?

Répondre

2

je suppose que cela dépend de ce que vous définissez comme « quelque chose de trop méchant » :-)

La classe PrintDocument a un objet Graphics vous pouvez utiliser pour cela, ce qui a une méthode TranslateTransform et RotateTransform qui vous permettra d'obtenir les choses où vous en avez besoin.

Il est souvent utile de prendre une copie de l'objet graphique avant de le manipuler afin de pouvoir le restaurer lorsque vous avez terminé.

+0

non testé mais semble prometteur! –

+1

Je l'ai utilisé avec succès dans un code PDF-wrangling chez mon dernier employeur. Hélas, depuis que je suis parti, je n'ai pas accès au code réel, mais c'est assez facile à mettre en œuvre. –

2
+1

Mais je veux 180 degrés de ce paysage est. –

+0

Vous ne pouvez pas simplement retourner le stock d'étiquettes? –

+0

Ou est-ce spooled plutôt que dans un bac? –

1

avez-vous essayé avant de l'attribuer à l'imprimante GDI tourner l'image elle-même? c'est ce que je l'ai fait:

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

       } 
2

imprimer une forme et flip/tournent un PrintDocument en VB.NET et mis DefaultPageSettings au paysage

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 
Questions connexes