none
Drucken mit PrintForm RRS feed

  • Frage

  • Hallo Leute,
    ich möchte mittels PrintForm eine Form ausdrucken.
    Dies ist auch möglich, nur wird die Form am Ausdruck immer beschnitten.
    Wie kann ich es realisieren, dass die Form größenangepasst gedruckt wird.

    Ich habe es schon versucht, dass ich vor dem Druck die Formgröße auf den druckbaren Bereich anpasse:

    Form.Size = New Size(CInt(PrintForm.PrinterSettings.DefaultPageSettings.PrintableArea.Size.Height), CInt(PrintForm.PrinterSettings.DefaultPageSettings.PrintableArea.Size.Width))
    (Height und Width sind vertauscht, weil ich im Querformat drucke)

    Die Sache verbessert sich zwar, jedoch wird die Form noch immer beschnitten. (weniger als zuvor)
    Wenn ich beim obigen Code Korrekturwerte einfüge, dann schaffe ich es, dass korrekt gedruckt wird aber solche Korrekturen sind sicherlich nicht sinnvoll.

    PrintForm.PrinterSettings.DefaultPageSettings.Landscape = True
    PrintForm.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.FullWindow)

    Vielen Dank im Voraus
    Christian Tauschek


    Christian Tauschek

    Sonntag, 18. Mai 2014 13:15

Alle Antworten

  • Hallo Ionut,
    danke für deine Antwort.

    Ich habe es nun wie untenstehend realisiert. Den Code habe ich im Internet gefunden und diesen mit 'ScaleTransform' ergänzt, sodass ich das Bitmap für den druckbaren Bereich anpasse.

    mfg
    Christian

        ' Bitmap-Objekt für die aktuelle Form
        Dim oBitmap As Bitmap
    
        ' Objekte für Ausdruck/Seitenvorschau
        Dim WithEvents PrintDocument As New Printing.PrintDocument
    
        Private Sub tstbutDrucken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tstbutDrucken.Click
            ' Rechteck in der benötigten Größe erstellen
            Dim oRect As New Rectangle(Me.Left, Me.Top, Me.Width, Me.Height)
    
            ' Bitmap-Objekt erstellen
            oBitmap = New Bitmap(oRect.Width, oRect.Height, Imaging.PixelFormat.Format24bppRgb)
    
            ' Screenshot des Desktops für das ausgewählten Rechteckes erstellen
            Using g As Graphics = Graphics.FromImage(oBitmap)
                g.CopyFromScreen(oRect.Left, oRect.Top, 0, 0, New Size(oRect.Width, oRect.Height))
            End Using
    
            Dim PD As New PrintDialog()
            PD.UseEXDialog = True
            PD.PrinterSettings = PrintDocument.PrinterSettings
            If PD.ShowDialog = DialogResult.OK Then
                PrintDocument.PrinterSettings.PrinterName = PD.PrinterSettings.PrinterName
                PrintDocument.Print()   'drucken
            End If
    
        End Sub
    
        ' Hier erfolgt der Ausdruck des Bitmaps
        Private Sub PrintDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
            Dim maxX, MaxY As Single
            Dim gr As Graphics = e.Graphics
    
            oBitmap.RotateFlip(RotateFlipType.Rotate90FlipNone) 'Bitmap drehen
    
            Dim PS As Printing.PageSettings = PrintDocument.DefaultPageSettings
    
            'den druckbaren Bereich berücksichtigen
            maxX = PS.PaperSize.Width - PS.Margins.Left - PS.Margins.Right
            MaxY = PS.PaperSize.Height - PS.Margins.Top - PS.Margins.Bottom
    
            ' Bitmap-Objekt drucken
            gr.ScaleTransform(maxX / oBitmap.Size.Width, MaxY / oBitmap.Size.Height)    'das Bitmap verkleinern
            gr.DrawImageUnscaled(oBitmap, PS.Margins.Left, PS.Margins.Top)
    
            e.HasMorePages = False
    
            ' Bitmap zerstören
            oBitmap.Dispose()
        End Sub


    Christian Tauschek

    Montag, 19. Mai 2014 12:02