Appunti di Programmazione

Creative Commons License

Pagina 1 2 3 4 5 6 7 8

Stampare Immagini

Ecco un esempio di codice per stampare una singola immagine.

Imports System.Drawing.Printing

Public Class Form1

    'definizione del documento da stampare, della finestra Anteprima, della finestra di Stampa e dei due pulsanti
    Private WithEvents documento As New PrintDocument
    Private WithEvents PrintPreviewDialog1 As New PrintPreviewDialog
    Private WithEvents PrintDialog1 As New PrintDialog
    Private WithEvents btnAnteprima As New Button
    Private WithEvents btnStampa As New Button

    Public Sub New()

        InitializeComponent()

        'inizializzazione della Form
        With Me
            .Size = New Size(220, 130)
            .Text = "Stampa Immagini"
            .Controls.Add(btnAnteprima)
            .Controls.Add(btnStampa)
        End With

        'inizializzazione del pulsante "Anteprima"
        With btnAnteprima
            .Size = New Size(75, 25)
            .Location = New Point(69, 21)
            .Text = "Anteprima"
        End With

        'inizializzazione del pulsante "Stampa"
        With btnStampa
            .Size = New Size(75, 25)
            .Location = New Point(69, 50)
            .Text = "Stampa"
        End With

    End Sub

    Private Sub btnAnteprima_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles btnAnteprima.Click

        'si associa il nostro documento di stampa alla finestra di dialogo...
        PrintPreviewDialog1.Document = documento

        'e la si mostra all'utente
        PrintPreviewDialog1.Show()

    End Sub

    Private Sub btnStampa_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnStampa.Click

        'come per l'anteprima si associa il nostro documento alla finestra di dialogo
        PrintDialog1.Document = documento

        'e se viene premuto il tasto "OK" la si stampa
        If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then

            documento.Print()

        End If

    End Sub

    Private Sub documento_PrintPage(ByVal sender As Object, ByVal e As _
    System.Drawing.Printing.PrintPageEventArgs) Handles documento.PrintPage

        'impostazione dell'immagine da visualizzare, ne ho scelta una di 800x600 pixels
        Dim immagine As Image = Image.FromFile("D:\Immagini\Paesaggio_9.jpg")

        'rapporto fa la larghezza dell'area stampabile e la larghezza dell'immagine
        Dim rapportoL As Double = e.MarginBounds.Width / immagine.Width

        'rapporto fra l'altezza dell'area stampabile e l'altezza dell'immagine
        Dim rapportoH As Double = e.MarginBounds.Height / immagine.Height

        'larghezza dell'immagine
        Dim LImmagine As Integer = immagine.Width

        'altezza dell'immagine
        Dim HImmagine As Integer = immagine.Height

        'posizione del vertice alto-sx dell'immagine
        Dim x As Integer = 0
        Dim y As Integer = 0

        'Se l'immagine è più grande del foglio che deve contenerla, essa viene scalata.
        'Per questo si valutano i due rapporti, rapportoL e rapportoH, e si utilizza quello di valore minore,
        'poi attraverso una proporzione si scala l'immagine in modo che la relativa dimensione (larghezza per rapportoL,
        'altezza per rapportH) sia uguale a quella dell'area stampabile
        If e.MarginBounds.Width < immagine.Width Or e.MarginBounds.Height < immagine.Height Then

            If rapportoL < rapportoH Then

                HImmagine = CType(rapportoL * immagine.Height, Integer)
                LImmagine = CType(e.MarginBounds.Width, Integer)

            Else

                HImmagine = CType(e.MarginBounds.Height, Integer)
                LImmagine = CType(rapportoH * im  magine.Width, Integer)

            End If

        End If

        'centra l'immagine nel foglio
        y = CType((e.PageBounds.Height - HImmagine) / 2, Integer)
        x = CType((e.PageBounds.Width - LImmagine) / 2, Integer)

        'si disegna l'immagine alle coordinate (x,y) e con le nuove dimensioni Limmagine e Himmagine
        e.Graphics.DrawImage(immagine, x, y, LImmagine, HImmagine)

    End Sub


End Class

Stampa Immagini

Download sorgente "Stampa_Immagini.zip" ( 65KB )

E adesso un esempio di codice in cui si stampa una serie di 9 immagini raccolte in una griglia di 3x3.

Imports System.Drawing.Printing

Public Class Form1

    'definizione del documento da stampare, della finestra Anteprima, della finestra di Stampa e dei due pulsanti
    Private WithEvents documento As New PrintDocument

    'creazione della finestra "Anteprima di Stampa"
    Private WithEvents PrintPreviewDialog1 As New PrintPreviewDialog

    'creazione della finestra "Stampa"
    Private WithEvents PrintDialog1 As New PrintDialog

    'definizione del pulsante per avviare l'"Anteprima Stampa"
    Private WithEvents btnAnteprima As New Button

    'definizione del pulsante per avviare la finsetra "Stampa"
    Private WithEvents btnStampa As New Button

    Public Sub New()

        InitializeComponent()

        'inizializzazione della Form
        With Me
            .Size = New Size(220, 130)
            .Text = "Stampa Immagini"
            .Controls.Add(btnAnteprima)
            .Controls.Add(btnStampa)
        End With

        'inizializzazione del pulsante "Anteprima"
        With btnAnteprima
            .Size = New Size(75, 25)
            .Location = New Point(69, 21)
            .Text = "Anteprima"
        End With

        'inizializzazione del pulsante "Stampa"
        With btnStampa
            .Size = New Size(75, 25)
            .Location = New Point(69, 50)
            .Text = "Stampa"
        End With

    End Sub

    Private Sub btnAnteprima_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAnteprima.Click

        'si associa il nostro documento di stampa alla finestra di dialogo...
        PrintPreviewDialog1.Document = documento

        'e la si mostra all'utente
        PrintPreviewDialog1.Show()

    End Sub

    Private Sub btnStampa_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnStampa.Click

        'come per l'anteprima si associa il nostro documento alla finestra di dialogo
        PrintDialog1.Document = documento

        'e se viene premuto il tasto "OK" la si stampa
        If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then

            documento.Print()

        End If

    End Sub

    Private Sub documento_PrintPage(ByVal sender As Object, ByVal e As _
    System.Drawing.Printing.PrintPageEventArgs) Handles documento.PrintPage

        'impostazione delle immagini da visualizzare
        Dim immagine(0 To 8) As Image

        'definizione del rapporto fra la larghezza dell'immagine e quella della pagina
        Dim rapportoL As Double

        'definizione del rapporto fra l'altezza dell'immagine e quella della pagina
        Dim rapportoH As Double

        'definizione della larghezza dell'immagine
        Dim LImmagine As Integer

        'definizione dell'altezza dell'immagine
        Dim HImmagine As Integer

        'coordinate del punto di inserimento delle varie immagini
        Dim x As Integer = 0
        Dim y As Integer = 0

        'le immagini che saranno visualizzate
        immagine(0) = Image.FromFile("D:\Immagini\Paesaggio_1.jpg")
        immagine(1) = Image.FromFile("D:\Immagini\Paesaggio_2.jpg")
        immagine(2) = Image.FromFile("D:\Immagini\Paesaggio_3.jpg")
        immagine(3) = Image.FromFile("D:\Immagini\Paesaggio_4.jpg")
        immagine(4) = Image.FromFile("D:\Immagini\Paesaggio_5.jpg")
        immagine(5) = Image.FromFile("D:\Immagini\Paesaggio_6.jpg")
        immagine(6) = Image.FromFile("D:\Immagini\Paesaggio_7.jpg")
        immagine(7) = Image.FromFile("D:\Immagini\Paesaggio_8.jpg")
        immagine(8) = Image.FromFile("D:\Immagini\Paesaggio_9.jpg")

        'contatori per determinare la posizione delle immagini nella pagina secondo una griglia di 3x3
        Dim j As Integer = 0
        Dim k As Integer = 0

        For i As Integer = 0 To 8

            rapportoL = 160 / immagine(i).Width
            rapportoH = 120 / immagine(i).Height
            LImmagine = immagine(i).Width
            HImmagine = immagine(i).Height

            'ridimensiona le immagini in modo che o la larghezza sia 160 px, o l'altezza sia 120 px
            If immagine(i).Width > 160 Or immagine(i).Height > 120 Then

                If rapportoL < rapportoH Then

                    HImmagine = CType(rapportoL * immagine(i).Height, Integer)
                    LImmagine = 160

                Else

                    HImmagine = 120
                    LImmagine = CType(rapportoH * immagine(i).Width, Integer)

                End If

            End If

            Dim incX As Integer = CType((e.PageBounds.Width - 480) / 4, Integer)
            Dim incY As Integer = CType((e.PageBounds.Height - 360) / 4, Integer)

            x = incX * (k + 1) + 160 * k
            y = incY * (j + 1) + 120 * j
            e.Graphics.DrawImage(immagine(i), x, y, LImmagine, HImmagine)

            If j >= 2 Then

                j = 0
                k += 1

            Else

                j += 1

            End If

        Next

    End Sub

End Class

Stampa Serie Immagini

Download sorgente "Stampa_Serie_Immagini.zip" ( 66KB )

Pagina 1 2 3 4 5 6 7 8