Discussion: Impression "d'image" en vb [Débutant]

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2017
    Messages : 3
    Points : 2
    Points
    2

    Par défaut Impression "d'image" en vb

    Bonjour à tous,

    Je suis stagiaire dans une entreprise, j'utilise Visual Studio 2010 et je programme en vb. Je voudrais savoir s'il est possible d'imprimer une image sur laquelle on place la valeur de textboxes.
    Le programme sur lequel je travaille permet de remplir un formulaire relatif à la TVA, et mon but est d'utiliser l'image .png d'un document et placer les valeurs par dessus cette image.

    Nom : TVA.png
Affichages : 77
Taille : 251,8 Ko

    Est-ce possible ? Je n'ai pas trouvé de topic sur ce point.

    Merci de vos réponses.

  2. #2
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 484
    Points : 3 057
    Points
    3 057
    Billets dans le blog
    6

    Par défaut

    Bonsoir,

    Avant toute chose il faut placer ton document dans un contrôle PictureBox : Attention de bien veiller à la gestion du redimensionnement pour que ton document en sortie pour l'impression respecte les dimensions du format A4 !
    Ensuite tu travailles avec e.Graphics dans l'event PaintEventArgs du contrôle PictureBox afin d'écrire le texte de ta textbox grâce à la méthode .DrawString.

    Voici un exemple :

    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    Ensuite tu utilises la classe PrintDocument pour l'impression :

    https://msdn.microsoft.com/en-us/lib...tdocument.aspx

    ou éventuellement pour imprimer une image il existe énormément de ressources sur le Net :

    http://stackoverflow.com/questions/9...fit-paper-size


    A+

  3. #3
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 886
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 886
    Points : 3 242
    Points
    3 242

    Par défaut

    bonjour

    Pour résoudre ton épineux problème ,le moyen le plus approprie est
    1/ de dessiner le contenu(propriété Text) des TextBoxes sur ton Bitmap
    2/ d'imprimer ton Bitmap

    Mais pour avoir un positionnement exact

    Ingrédients :
    - un control PrintDocument
    - un control PageSetupDialog1 d'invite User
    - Ajouter un Panel avec Autoscroll=True
    - dropper sur le Panel un PictureBox
    - PictureBox.Location(0,0)
    - PictureBox.SizeMode = PictureBoxSizeMode.AutoSize
    - dropper 2 TextBox "clones" sur le PictureBox (plus de 2 si besoin)....
    "Clones" car il faut leur affecter au moment d'imprimer les valeurs des TextBoxes originaux(propriété Text )...
    Etape1:
    -Dessiner le contenu des 2 TextBoxes "Clones" sur ton Bitmap (button1)

    Etape2:
    - Imprimer ton Bitmap (button2)
    La fonction ImageRectangleFromSize s'occupe d'ajuste Bitmap pour tenir sur la page "sans distorsion"
    Le Rectangle.Inflate() permet de ménager une marge éventuelle de 20....

    le Control CheckBox change la visibilité des 2 TextBoxes pour examiner le positionnement du texte imprimé sur le Bitmap avant d'imprimer définitivement....

    code .vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    Public Class Form2
        Private myImage As Bitmap = Nothing
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Panel1.AutoScroll = True
     
            PictureBox1.Location = New Point(0, 0)
            PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
            PictureBox1.Image = My.Resources.Koala
     
            TextBox1.Text = "So we don't need to go through all eight"
            TextBox1.ForeColor = Color.Red
            TextBox1.Font = New Font(TextBox1.Font.Name, 12, FontStyle.Bold)
     
            TextBox2.Text = "What about for other polygons?"
            TextBox2.ForeColor = Color.BlueViolet
            TextBox2.Font = New Font(TextBox1.Font.Name, 12, FontStyle.Bold)
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
     
            myImage = PictureBox1.Image
     
            PrepareImage()
     
        End Sub
        Private Sub PrepareImage()
            Using gr As Graphics = Graphics.FromImage(myImage)
                Using txtBrush As New SolidBrush(TextBox1.ForeColor)
                    gr.DrawString(TextBox1.Text, TextBox1.Font, txtBrush, TextBox1.Location)
                End Using
                Using txtBrush As New SolidBrush(TextBox1.ForeColor)
                    gr.DrawString(TextBox2.Text, TextBox2.Font, txtBrush, TextBox2.Location)
                End Using
            End Using
            'Refresh  PictureBox 
            PictureBox1.Image = myImage
        End Sub
        Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            If myImage Is Nothing Then Return
     
            ' Let the user select page settings
            Dim gr As Graphics = e.Graphics
            Dim rect As Rectangle = e.PageBounds
     
            rect = ImageRectangleFromSize(rect, myImage)
            rect.Inflate(-20, -20)
            myImage = New Bitmap(myImage, rect.Width, rect.Height)
            gr.DrawImage(myImage, rect)
     
        End Sub
     
        'Rectangle du mode ZOOM extrait du code source .Net Framework source de PictureBox 
        Private Function ImageRectangleFromSize(ByVal args As Rectangle, ByVal img As Image) As Rectangle
     
     
            Dim result As Rectangle = args
     
            If (img IsNot Nothing) Then
     
                Dim imageSize As Size = img.Size
                Dim ratio As Single = Math.Min(args.Width / imageSize.Width, args.Height / imageSize.Height)
                result.Width = CInt(imageSize.Width * ratio)
                result.Height = CInt(imageSize.Height * ratio)
                result.X = (args.Width - result.Width) / 2
                result.Y = (args.Height - result.Height) / 2
     
            End If
            Return result
        End Function
     
        'Impression
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            If myImage Is Nothing Then Return
            PageSetupDialog1.Document = PrintDocument1
            PageSetupDialog1.ShowDialog()
            PrintDocument1.Print()
        End Sub
        'Verifie le positionnement du texte des 2 TextBox
        Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
            If CheckBox1.Checked Then
                TextBox1.Hide()
                TextBox2.Hide()
            Else
                TextBox1.Show()
                TextBox2.Show()
            End If
        End Sub
     
     
    End Class
    bon code...

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2017
    Messages : 3
    Points : 2
    Points
    2

    Par défaut

    Salut,

    Merci pour vos réponses, mais en tapant ma tête sur le clavier j'ai trouvé une autre solution hier (que je pense plutôt moche d'ailleurs) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Private Sub impression_page(ByVal sender As Object, ByVal ev As System.Drawing.Printing.PrintPageEventArgs)
     
     
            Dim ypos As Integer = ev.MarginBounds.Top - 80 ' Marginbounds.top désigne la marge haute
     
            'xpos = coordonnée horizontale, par rapport au bord gauche de la feuille
            Dim xpos As Integer = ev.MarginBounds.Left - 100
     
            Dim com As New Font("Arial", 8)
     
            ' Image doc tva
            ev.Graphics.DrawImage(System.Drawing.Image.FromFile("Z:\\\Resources\TVA.png"), xpos, ypos)
     
            ' Affichage des tbx
            ev.Graphics.DrawString(tbx_01.Text, com, Brushes.Black, xpos + 295, ypos + 55)
            ev.Graphics.DrawString(tbx_02.Text, com, Brushes.Black, xpos + 295, ypos + 75)
            ev.Graphics.DrawString(tbx_02a.Text, com, Brushes.Black, xpos + 295, ypos + 103)
            ev.Graphics.DrawString(tbx_03.Text, com, Brushes.Black, xpos + 295, ypos + 143)
    J'affiche d'abord l'image et j'ajoute les textboxes par dessus, et je positionne tout ça à la main
    Il faudra que j'essaie vos solutions, ça sera sûrement plus joli haha.

    Vous pensez que ma solution va poser problème ? Comme un changement d'alignement d'un PC à un autre par exemple ?

  5. #5
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 886
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 886
    Points : 3 242
    Points
    3 242

    Par défaut

    bonjour

    J'affiche d'abord l'image et j'ajoute les textboxes par dessus, et je positionne tout ça à la main
    Si c'était aussi simple ,je ne me serai pas ruiné l'existence à me taper ce code !!!

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2017
    Messages : 3
    Points : 2
    Points
    2

    Par défaut

    Bonjour,

    Désolé, on travaille de 14 à 20h je me suis lancé et je n'ai pas pensé à mettre mon code hier.
    Mais merci d'avoir répondu et encore désolé de ma lenteur. J'espère que cette façon simpliste servira à quelqu'un qui passera par là.

    Je marque comme résolu.

    A+

  7. #7
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 484
    Points : 3 057
    Points
    3 057
    Billets dans le blog
    6

    Par défaut

    Citation Envoyé par MABROUKI Voir le message
    bonjour


    Si c'était aussi simple ,je ne me serai pas ruiné l'existence à me taper ce code !!!
    On n'est pas non plus obligé de faire du spoon feeding ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/01/2007, 19h31
  2. Enlever le boutton impression sur une image !
    Par Gab-Gab dans le forum JavaScript
    Réponses: 3
    Dernier message: 13/11/2004, 23h30
  3. [BPW] Impression d'une image BMP
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 21/08/2003, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo