Bonjour,
Actuellement, je travaille sur un logiciel de gestion qui fait appel aux états access afin d'imprimer.
J'aimerais dorénavant ne plus passer par ces états, mais mettre en forme la page à imprimer directement avec vb.
Merci pour votre aide.
Version imprimable
Bonjour,
Actuellement, je travaille sur un logiciel de gestion qui fait appel aux états access afin d'imprimer.
J'aimerais dorénavant ne plus passer par ces états, mais mettre en forme la page à imprimer directement avec vb.
Merci pour votre aide.
Bonjour,
Sujet vaste s'il est un.
Mais comme tu ne dis rien de tes réels besoins et de ce que tu as réellement en tête, on ne peut que répondre par des généralités.
Si tu veux mettre tes rapports en page sans devoir recourir à un programme externe, il existe des composants .net pour la génération de rapports, dont quelques uns sont gratuits.
Mais en général, mettre un document en forme à partir de zéro avec VB, c'est l'enfer.
Tu peux toujours commencer avec cela :
http://www.codeproject.com/Articles/...rinting-in-NET
Bonjour,
Les impressions directes avec vb sont expliquées dans le tuto présenté dans cette page.
J'ai utilisé le principe pour faire des impressions en C#. Au début cela semble rebutant, mais une fois le principe acquis, ça se fait.
Merci pour votre aide,
Je précise mon besoin: sur mon logiciel, par exemple quand je vais sur un devis, j'ai des informations concernant le client, les produits de sa commande, le montant.. Je peux imprimer ce devis, mais cela ce fait à partir d'un état access, je souhaite donc maintenant générer ce document directement avec vb.net, sans passer par access, en réutilisant directement les données affichées sur mon logiciel.
Bonsoir beber12,
Pourquoi ne pas créer un état .rdlc et utiliser le composant reportviewer pour l'afficher. Ce serait plus simple je trouve.
Bonsoir Callo,
Ce n'est pas moi qui décide de quelle manière ça doit-être fait et on me demande de le faire comme ça (mise en forme manuelle, utilisation des XPos et YPos)
J'ai aussi ce problème :
L'IDE me dit que cet évènement (PrintPage) est introuvable.. Faut peut-être un "Imports" (sachant que j'ai celui là déjà : Imports System.Drawing.Printing)?Code:
1
2 Private Sub btn_imp_Click(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles btn_imprimer.PrintPage
Merci pour votre aide
Ben non, le contrôle bouton n'a pas d'évènement PrintPage.
Un objet de type PrintDocument pourra gérer l'évènement PrintPage.
Un exemle légérement modifié de MSDN
Je le lance depuis un menu mais depuis un bouton c'est pareil.
Vu que j'ai testé sur un fichier, je laisse ev.MarginBounds.Left pour positionner chaque début de ligne.Code:
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 Private printFont As Font Private streamToPrint As System.IO.StreamReader Private Sub PrintDocumentToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles PrintDocumentToolStripMenuItem.Click Try streamToPrint = New System.IO.StreamReader("d:\data\fic.txt") Try printFont = New Font("Arial", 10) Dim prdoc As New System.Drawing.Printing.PrintDocument() AddHandler prdoc.PrintPage, AddressOf Me.pd_PrintPage prdoc.Print() Finally streamToPrint.Close() End Try Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub ' L'évènement PrintPage est envoyé pour chaque page qui doit être imprimée. Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As System.Drawing.Printing.PrintPageEventArgs) Dim linesPerPage As Single = 0 Dim yPos As Single = 0 Dim count As Integer = 0 Dim line As String = Nothing ' Calcule le nombre de ligne par page. linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics) ' Iprime chaque ligne du fichier. While count < linesPerPage line = streamToPrint.ReadLine() If line Is Nothing Then Exit While yPos = ev.MarginBounds.Top + count * printFont.GetHeight(ev.Graphics) ev.Graphics.DrawString(line, printFont, Brushes.Black, ev.MarginBounds.Left, yPos, New StringFormat()) count += 1 End While ' d'autre lignes?, une autre page à imprimer. If (line IsNot Nothing) Then ev.HasMorePages = True Else ev.HasMorePages = False End Sub
Si tu as plusieurs éléments à mettre sur une ligne il faudrat calculer leurs emplacements ; remplacer "ev.MarginBounds.Left" par xpos, avec xpos = ev.MarginBounds.Left + calcul de l'emplacement voulu
Merci beaucoup pour ton aide rv26t, ça m'avance bien! :ccool:
Par contre, j'aimerais récupérer les données à partir de ma base de données; pas à partir d'un fichier..
Merci