Problème VB.NET, impression multipage PDF
Bonjour a tous, j'ai besoin d'aide sur un code en VB, j'ai regardé plusieurs Forum mais aucun ne correspond précisément à mon type de problème.
Lors d'un clique sur un bouton, un PDF correspondant à un Devis d'un client se génère. Dans ce PDF, j'ai un Entête, le contenu du Devis et un Pied de page.
Tout s'écrit sur la même page au bon endroit. Seulement, j'aimerai qu'une deuxième page PDF se crée lorsqu'il y a plus de 13 lignes dans le contenu du Devis.
Je vous ai simplifier mon raisonnement dans le bout de code que je vous donne plus bas.
Le contenu d'un devis possède deux remplissages possible:
- Un Ensemble ou plusieurs (composé de sous ensembles) par exemple une "UNITE CENTRALE" avec ses sous ensembles tel que carte mère, RAM,...
- Des produits
Je vérifie a chaque fois si je dépasse pas 13 lignes.
Si je dépasse 13 lignes je veux passer à la page suivante et écrire les lignes restantes.
Voici le code de la fonction du bouton :
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
|
Public Sub btn_devis_pdf_Click()
Try
Dim Verif_Presence As Boolean = False
For Each files As String In My.Computer.FileSystem.GetFiles("Z:\Scan", FileIO.SearchOption.SearchTopLevelOnly)
' FileIO.SearchOption.SearchTopLevelOnly cherche uniquement dans ce dossier en excluant les sous-dossiers
Dim Fi As New System.IO.FileInfo(files) ' Instanciation du fichier trouvé
If (Fi.Name = "devis" & tbx_dev_code.Text & ".pdf") Then
Verif_Presence = True
My.Computer.FileSystem.DeleteFile(files)
End If
Next
Traduction_Impression()
Dim prdoc As New System.Drawing.Printing.PrintDocument()
prdoc.PrinterSettings.PrinterName = "PDFCreator"
AddHandler prdoc.PrintPage, AddressOf impression_PDF
prdoc.DocumentName = "devis" & tbx_dev_code.Text
Try
prdoc.Print()
MsgBox("Le fichier PDF a bien été créé et porte le nom : " & "devis" & tbx_dev_code.Text & ".pdf")
Catch ex As Exception
MsgBox("1) Vérifiez que PDFCreator est bien installé sur votre machine." & vbCrLf & "2) Vérifiez dans PDFCreator que l'enregistrement automatique est activé et configuré sur '<Title>'." & vbCrLf & "3) Vérifiez que votre répertoire 'Scan' est accessible.", MsgBoxStyle.Information, "CORTEX-GESTION - Impression PDF")
End Try
Catch
MsgBox("Veuillez verifier qu'aucun document portant le nom " & "devis" & tbx_dev_code.Text & ".pdf ne soit ouvert et recommencez")
End Try
End Sub |
Code du programme (simplifié)
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 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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
Private Sub impression_PDF(ByVal sender As Object, ByVal ev As System.Drawing.Printing.PrintPageEventArgs)
'***************************
'* Ecriture en contenu *
'***************************
' ======= RECUPERATION DU NOMBRE DE LIGNES =======
Obj_Command2.CommandText = "SELECT COUNT(*) AS NbreArt FROM LIGNE_DEVIS_CLIENT WHERE DEV_ID = " + tbx_dev_code.Text + ""
Obj_Reader2 = Obj_Command2.ExecuteReader()
Obj_Reader2.Read()
Dim commande As String
commande = Obj_Reader2.Item(0).ToString
'Instancier un objet Commande
Obj_Command3 = New OleDbCommand()
'initialiser l'objet Command
Obj_Command3.Connection() = laConnexionPrincipale
'requête pour affichage des articles
Obj_Command3.CommandText = "SELECT COUNT(*) FROM LIGNE_DEVIS_CLIENT, ENSEMBLE, LIGNE_ENSEMBLE WHERE LIGNE_ENSEMBLE.ENS_ID=ENSEMBLE.ENS_ID AND LIGNE_DEVIS_CLIENT.ENS_ID=ENSEMBLE.ENS_ID AND LIGNE_DEVIS_CLIENT.DEV_ID=" + tbx_dev_code.Text + ""
'MsgBox(Obj_Command3.CommandText)
Obj_Reader3 = Obj_Command3.ExecuteReader()
Obj_Reader3.Read()
Dim s_ens As String
s_ens = Obj_Reader3.Item(0).ToString
onversion String en Integer
Dim commande1 As Integer
commande1 = Integer.Parse(commande)
Dim s_ens1 As Integer
s_ens1 = Integer.Parse(s_ens)
Nombre de lignes totales
Dim tot As Integer
tot = s_ens1 + commande1
'Détermine le nombre de pages
Dim nbPages As Double = tot / 13
'Math.Ceiling permet de recupérer l'entier au dessus du double. Par exemple Math.Ceiling(2.54) = 3
nbPages = Math.Ceiling(nbPages)
' ======= FIN DE RECUPERATION DU NOMBRE DE LIGNES =======
'Permet de savoir dans quelle page on se situe
Dim indexPArcoursPages = 1
Obj_Reader2.Close()
Obj_Reader3.Close()
Dim compteur As Integer = 0
'Instancier un objet Commande
Obj_Command = New OleDbCommand()
'initialiser l'objet Command
Obj_Command.Connection() = laConnexionPrincipale
'requête pour affichage des articles
Obj_Command.CommandText = "SELECT LIGNE_DEVIS_CLIENT.ENS_ID, ENSEMBLE.ENS_REF, ENSEMBLE.ENS_LIB, ENSEMBLE.ENS_TOTAL_HT, ENSEMBLE.ENS_REM, ENSEMBLE.ENS_TVA, ENSEMBLE.ENS_TOTAL_TTC, ENSEMBLE.ENS_QTE FROM LIGNE_DEVIS_CLIENT, ENSEMBLE WHERE LIGNE_DEVIS_CLIENT.ENS_ID=ENSEMBLE.ENS_ID AND DEV_ID=" + tbx_dev_code.Text + ""
Obj_Reader = Obj_Command.ExecuteReader()
Obj_Command3.CommandText = "SELECT ..."
Obj_ReaderEnsemble= Obj_Command3.ExecuteReader()
While (indexPArcoursPages <= nbPages)
'PArcours des Ensembles
While Obj_ReaderEnsemble.Read() And compteur <= 12
If (ens <> " ") Then
If (compteur = 13) Then
compteur = 0
Exit While
End If
compteur = compteur + 1
'ECRITURE DE L'ENSEMBLE
Obj_Command1.CommandText = "SELECT ..."
Obj_ReaderSousEnsemble = Obj_Command1.ExecuteReader()
'PArcours des sous ensembles
While Obj_ReaderSousEnsemble.Read() And compteur <= 12
compteur = compteur + 1
'ECRITURE DU SOUS ENSEMBLE DE L'ENSEMBLE
End While
Obj_Reader1.Close()
End If
End While
'Les produits
While Obj_ReaderProduit.Read() And compteur <= 12
compteur = compteur + 1
'ECRITURE DU CONTENU DE TYPE PRODUIT
If (compteur = 13) Then
compteur = 0
Exit While
End If
End While
'Nous sommes revenu au début
If compteur = 0 Then
'Saut de page pour écrire le reste
ev.HasMorePages = True
MsgBox("ev.HasMorePages = True -> On passe à une autre page")
End If
indexPArcoursPages += 1
End While
Obj_Reader.Close()
Obj_Reader3.Close()
ev.HasMorePages = False
End Sub |
Merci :) .