Stampare un form ad alta risoluzione in vbnet?

di il
12 risposte

Stampare un form ad alta risoluzione in vbnet?

Buongiorno,

sto scrivendo un piccolo programma in vb.net ed avrei bisogno di stampare il form così come appare sullo schermo.

Ignorante della materia ho cercato online ed ho trovato una soluzione che effettivamente mi permette la stampa

Imports System.Windows.Forms.VisualStyles.VisualStyleElement

Public Class Form14
    Dim memoryImage As Bitmap
    
    Private Sub Form14_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Corpo del programma
    End Sub
    
    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        e.Graphics.DrawImage(memoryImage, 0, 0)
    End Sub
    
   Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
        PictureBox1.Visible = False
        Me.FormBorderStyle = FormBorderStyle.None
        Me.WindowState = FormWindowState.Maximized
        Call Stampa()
        Me.WindowState = FormWindowState.Normal
        Me.FormBorderStyle = FormBorderStyle.Sizable
        PictureBox1.Visible = True
    End Sub
    
    Private Sub Stampa()
        PrintDialog1.Document = PrintDocument1
        If PrintDialog1.ShowDialog() = DialogResult.OK Then
            Dim myGraphics As Graphics = Me.CreateGraphics()
            Dim s As Size = Me.Size
            memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
            Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
            memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s)
            PrintDocument1.Print()
        End If
    End Sub

End Class

La questione è che la stampa che viene prodotta è di pessima qualità.

Posso modificare qualcosa per renderla migliore?

Grazie!

12 Risposte

  • Re: Stampare un form ad alta risoluzione in vbnet?

    Nell'evento PrintPage controlla e modifica l'impostazione di e.Graphics.PageUnit

  • Re: Stampare un form ad alta risoluzione in vbnet?

    Grazie!

    Ho provato a modificare la pageunit.

    Ho fatto prove inserendo la pageunit.dispay, .documenti, .point.

    Trovo poca differenza nella stampata. Mi rimane sempre un po' “sgranata”, soprattutto i caratteri scritti molto piccoli

  • Re: Stampare un form ad alta risoluzione in vbnet?

    Una volta fatto in CopyFromScreen, cosa c'è nella variabile memoryImage  ??
    prova a salvare memoryImage  in un file PNG e poi vai a vederlo, è ad alta risoluzione ??

  • Re: Stampare un form ad alta risoluzione in vbnet?

    …… non sono capace a salvare il memoryImage in png…..

    Sono troppo dilettante….

  • Re: Stampare un form ad alta risoluzione in vbnet?

    Dopo la linea

    memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s)

    aggiungi

    memoryImage.Save(My.Computer.FileSystem.SpecialDirectories.Desktop & "\memoryImage.png", Drawing.Imaging.ImageFormat.Png)

    e sul desktop ti ritrovi memoryImage.png

    comunque secondo me prova a togliere la riga

    Dim myGraphics As Graphics = Me.CreateGraphics()


    e modificare la seguente riga in

    memoryImage = New Bitmap(s.Width, s.Height)
  • Re: Stampare un form ad alta risoluzione in vbnet?

    Altra prova che puoi fare: la riga

    e.Graphics.DrawImage(memoryImage, 0, 0)

    la modifichi in:

    e.Graphics.PageUnit = GraphicsUnit.Document   ' 300 DPI
    e.Graphics.DrawImage(memoryImage, 0, 0, memoryImage.Width, memoryImage.Height)
  • Re: Stampare un form ad alta risoluzione in vbnet?

    Grazie per i suggerimenti.

    Ho inserito queste modifiche, ma in realtà non cambia molto.. rimane sgranato, come se stesse zoomando. Infatti cambiando la riga in 

     GraphicsUnit.Document   ' 300 DPI
    e.Graphics.DrawImage(memoryImage, 0, 0, memoryImage.Width, memoryImage.Height

    Viene stampato piccolissimo

  • Re: Stampare un form ad alta risoluzione in vbnet?

    Ok, ma il file memoryImage.png te l'ha generato ??
    Quali sono le dimensioni in pixel ?
    Se non ci sono dati sensibili, potresti darci questo file così posso provare ?

  • Re: Stampare un form ad alta risoluzione in vbnet?

    Sì. il file png viene generato. lnserisco le immagini per spiegare meglio, non c'è nulla di particolarmente sensibile: devono essere semplicemente delle etichette da attaccare su prodotti farmaceutici.

    inserendo la riga

    e.Graphics.DrawImage(memoryImage, 0, 0, memoryImage.Width, memoryImage.Height)

    l'immagine viene così (1280 x 720 pixel):

    ed il pdf estremamente piccolo:

    mentre con il vecchio testo

    e.Graphics.DrawImage(memoryImage, 0, 0)

    l'immagine png non cambia mentre il pdf viene con le stesse dimensioni del mio monitor:

    tutti i testi sono con carattere Arial o Arial Narrow, con dimensioni variabili fra i 12 punti e i 4

  • Re: Stampare un form ad alta risoluzione in vbnet?

    Non stai usando la procedura corretta.

    Se vuoi stampare su stampante dovresti usare le procedure corrette ed avere così una buona qualità di stampa.

    Se vuoi proseguire nel tuo intento di creare prima una bitmap e poi stamparla ti posso comunque aiutare, dovresti però mandarmi l'immagine png sulla mia email, e poi comunque secondo me verrà sgranata, anche se riesco ad ingrandirla

  • Re: Stampare un form ad alta risoluzione in vbnet?

    La mia intenzione è stampare su stampante.

    Questa procedura di creare prima una bipmap e poi stampare l'ho trovata online e pensavo fosse quella corretta.

    Come devo modificare dunque?

  • Re: Stampare un form ad alta risoluzione in vbnet?

    Per iniziare togli la riga

    e.Graphics.DrawImage(memoryImage

    E guardati il metodo

    e.Graphics.DrawText

Devi accedere o registrarti per scrivere nel forum
12 risposte