Export Datagridview en Pdf
RésoluUtilisateur anonyme - 13 janv. 2024 à 20:55
- Export Datagridview en Pdf
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Comment faire un pdf - Guide
- Save as pdf - Télécharger - Bureautique
- Comment modifier un pdf - Guide
- Télécharger dictionnaire larousse pdf gratuit - Télécharger - Dictionnaires & Langues
14 réponses
27 déc. 2023 à 13:42
Bonjour
dans un commentaire, on devine que tu utilises itextsharp.
Peux-tu confirmer dans la capture ci-dessous duquel il s'agit ?
À noter que la version "originale" est donnée pour dépréciée. Du coup, il n'est pas conseiller de l'utiliser.
D'autre part, as-tu exécuté en pas à pas en espionnant les variables pour voir ce qui se passe ?
27 déc. 2023 à 15:34
Bonjour
En effet j’utilise la version dépréciée de itextsharp.
je fais la migration vers la bonne version et te tiens au courant
merci
27 déc. 2023 à 16:05
Re..
J'ai téléchargé la version conseillé itext7 puis désinstallé itextsharp .
Est ce que itext7 fait l'export et la création du pdf ?
Apparemment oui https://www.codeguru.com/dotnet/generating-a-pdf-document-using-c-net-and-itext-7/
tu peux convertir les exemples de code avec un convertisseur en ligne
29 déc. 2023 à 11:43
Bonjour
Je ne pensais pas que ce serait si laborieux pour exporter le datagridview dynamique en pdf .
j'ai récupéré ce code qui utilise itext7 que j'ai chargé via Nuget
Mis les imports.
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.IO.Font
Imports iText.IO.Font.Constants
Imports iText.Kernel.Font
Imports iText.Kernel.Colors
J(obtiens des erreurs quasi partout .( Voir photo en pj)
Merci de votre aide .
Private Sub btnPrint_Click(sender As Object, e As EventArgs) Handles btnPrint.Click Dim saveFileDialog As SaveFileDialog = New SaveFileDialog() saveFileDialog.Filter = "PDF Files (*.pdf)|*.pdf" saveFileDialog.Title = "Save PDF File" If saveFileDialog.ShowDialog() = DialogResult.OK Then Dim filePath As String = saveFileDialog.FileName Dim writer As PdfWriter = New PdfWriter(filePath) Dim pdf As PdfDocument = New PdfDocument(writer) Dim document As Document = New Document(pdf) Dim table As iText.Layout.Element.Table = New iText.Layout.Element.Table(DataGritable.ColumnCount) For Each column As DataGridViewColumn In DataGritable.Columns Dim cell As Cell = New Cell().Add(New Paragraph(column.HeaderText)) table.AddCell(cell) Next For Each row As DataGridViewRow In DataGritable.Rows For Each cell As DataGridViewCell In row.Cells table.AddCell(cell.Value.ToString()) Next Next document.Add(table) document.Close() MessageBox.Show("Export to PDF completed successfully!") End If End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question29 déc. 2023 à 13:21
Bonjour
Ce qui serait plus utile que ton image, ce serait le message d'erreur associé à chaque ligne en erreur.
Chez moi, je n'ai pas ces erreurs.
Celles que j'avais concernaient DataGridTable qui n'existe pas chez moi, j'ai supposé que c'est le nom que tu as donné à ton DataGridView (DataGridView1 précédemment).
En renommant avec le nom de mon DataGridView, je n'ai plus d'erreur de pré-compilation.
J'en ai à l'exécution, mais on verra ça dans un second temps.
J'ai résolu mon erreur à l'exécution en installant un package complémentaire itext7.bouncy-castle-adapter comme indiqué là https://stackoverflow.com/questions/76260218/how-do-i-resolve-unknown-pdfexception-when-using-itext7-in-net-maui
Pour le coup, les nuggets étaient justement censé installer toutes leurs dépendances d'eux-mêmes. Ils ont merdé ches Apryse
29 déc. 2023 à 14:13
Re..
j'ai bien désinstallé Itexsharp et en effet sauf erreur de ma part , itext7 ne s'est pas installé via Nuget .
J'ai téléchargé le itext7.bouncy-castle-adapter.8.0.2.nupkg mais comment le référencer dans mon projet ?
Ci-dessous les erreurs que j'obtiens
merci
29 déc. 2023 à 14:49
sauf erreur de ma part , itext7 ne s'est pas installé via Nuget .
Alors, le souci vient probablement de ça.
Nuggets ajoute la référence à ton projet, si tu le télécharges "à la main", il faut que tu le fasses de ton coté.
Dans le menu projet -> Ajouter une référence de Projet, bouton parcourir et tu vas chercher la librairie
31 déc. 2023 à 13:59
Bonjour
En changeant le .NET framework à 4.8.1 j'ai finalement réussi a installer Itext7 via Nuget.
Toutes les références maintenant sont installées .
j'ai abandonné l'export direct du datagritable dynamique en pdf (trop complexe) pour faire un export d'image que je positionne sur un pdf .
le résultat est plutôt satisfaisant ( à voir à l'impression ) .
Seulement je voudrais que le pdf créé soit en mode paysage, auriez vous une idée ?
Ci dessous le code qui fonctionne .
Imports iText.Kernel.Pdf Imports iText.Layout Imports iText.Layout.Element Imports iText.IO.Font Imports iText.IO.Font.Constants Imports iText.Kernel.Font Imports iText.Kernel.Colors Imports iText.Layout.Properties Imports iText.IO.Image Imports iText.Kernel.Pdf.Action Imports iText.Kernel.Pdf.Canvas.Draw Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Dim saveFileDialog As SaveFileDialog = New SaveFileDialog() saveFileDialog.Filter = "PDF Files (*.pdf)|*.pdf" saveFileDialog.Title = "Save PDF File" If saveFileDialog.ShowDialog() = DialogResult.OK Then Dim filePath As String = saveFileDialog.FileName Dim writer As PdfWriter = New PdfWriter(filePath) Dim pdf As PdfDocument = New PdfDocument(writer) Dim document As Document = New Document(pdf) Dim r As Integer = 0 For i = 0 To DataGritable.Rows.Count - 1 If DataGritable.Rows(i).Visible = True Then r = r + 1 End If Next 'Resize DataGridView to full height. Dim height As Integer = DataGritable.Height DataGritable.Height = r * 50 'Create a Bitmap and draw the DataGridView on it. Dim bitmap As Bitmap = New Bitmap(Me.DataGritable.Width, Me.DataGritable.Height) DataGritable.DrawToBitmap(bitmap, New System.Drawing.Rectangle(0, 10, DataGritable.Width, DataGritable.Height)) 'Resize DataGridView back to original height. DataGritable.Height = height ' DataGritable.Width = width 'Save the Bitmap to folder Dim Filename As String = System.IO.Path.GetFileName(My.Application.Info.DirectoryPath & "\bitmap" & "\" & "image.jpg") bitmap.Save(Filename) ''Creating an ImageData object Dim header As Paragraph = New Paragraph("Edition").SetTextAlignment(TextAlignment.LEFT).SetFontSize(12) Dim newline As Paragraph = New Paragraph(New Text(vbLf)) document.Add(newline) document.Add(header) 'Dim subheader As Paragraph = New Paragraph("SUB HEADER").SetTextAlignment(TextAlignment.CENTER).SetFontSize(15) ' document.Add(subheader) 'Dim ls As LineSeparator = New LineSeparator(New SolidLine()) ' document.Add(ls) Dim paragraph1 As Paragraph = New Paragraph("Edité le:" & Now) document.Add(paragraph1) Dim img As Image = New Image(ImageDataFactory.Create(Filename)).SetTextAlignment(TextAlignment.CENTER) document.Add(img) 'Dim n As Integer = pdf.GetNumberOfPages() ' For i As Integer = 1 To n 'document.ShowTextAligned(New Paragraph(String.Format("page" & i & " of " & n)), 559, 806, i, TextAlignment.RIGHT, VerticalAlignment.TOP, 0) ' Next document.Close() MessageBox.Show("Export to PDF completed successfully!") Else Exit Sub End If End Sub
31 déc. 2023 à 15:32
Bonjour
En changeant le .NET framework à 4.8.1 j'ai finalement réussi a installer Itext7 via Nuget.
En 4.8, mais quel était il précédent? Pour rappel, 4.X est obsolète. W11 ne garantit plus le fonctionnement de logiciels écrits pour 4.X
j'ai abandonné l'export direct du datagritable dynamique en pdf (trop complexe) pour faire un export d'image que je positionne sur un pdf
Le code que tu as posté au message 6 fonctionne chez moi, framework 6. Je ne vois pas en quoi il est complexe. Il présente l'avantage que les valeurs sont sélectionnables contrairement à une image.
Pour l'orientation en portrait, tu devrais trouver ton bonheur ici https://stackoverflow.com/questions/2019246/itextsharp-table-in-landscape
9 janv. 2024 à 15:59
Bonjour à toutes et a tous
Je vous souhaite une belle et heureuse année 2024 remplie de succès dans toutes vos entreprises .
Toujours dans la suite de ma problématique d'export , je n'ai toujours pas "réussi " a exporter le datagridview dynamique en pdf tout en conservant son format , police et couleur
J'ai construit une solution qui resume toute ma problématique avec un extrait de code avec itext7
Pourriez vous voir et y apporter des pistes de corrections
le lien a télécharger :
https://www.transfernow.net/dl/202401095YqcX1Ld
merci beaucoup
12 janv. 2024 à 23:35
Bonsoir
j'ai testé ton projet.
Premier problème, il n'était pas en 4.8, mais en 4.6.
Deuxième problème, tu n'as pas installé le package supplémentaire comme je te l'ai indiqué au message 9 https://forums.commentcamarche.net/forum/affich-37969784-export-datagridview-en-pdf#p37971195
Troisième problème, toute la colonne "31/04/2024" de ton datagridview est vide, ors, tu n'as traité le cas des cellules vides.
Avec cette boucle à partir de la ligne 76, c'est traité
For Each row As DataGridViewRow In DataGridView1.Rows For Each cell As DataGridViewCell In row.Cells If cell.Value IsNot Nothing Then table.AddCell(cell.Value.ToString()) End If Next Next
Une fois tout ça corrigé, ton code est fonctionnel.
J'écris fonctionnel, car un pdf est généré, mais en portait.
Dans le code, je ne trouve pas traces des 2 solutions proposées sur le post stackoverflow que je t'ai mis en lien au message 9 https://forums.commentcamarche.net/forum/affich-37969784-export-datagridview-en-pdf#p37972165
Je veux bien essayer de t'aider, mais déjà que se remettre dans ton sujet une fois tous les 10 jours, ce n'est pas forcément évidement, mais si c'est pour me rendre compte que tu n'as rien appliqué de ce que je t'ai proposé, je me demande à quoi ça sert ?
13 janv. 2024 à 10:36
En appliquant le code de stackoverflow et en modifiant la gestion des cellules vides (il faut envoyer string vide sinon ça décale tout).
Après quelques ajustements pour trouver la bonne taille de page
Dim saveFileDialog As SaveFileDialog = New SaveFileDialog() saveFileDialog.Filter = "PDF Files (*.pdf)|*.pdf" saveFileDialog.Title = "Save PDF File" If saveFileDialog.ShowDialog() = DialogResult.OK Then Dim filePath As String = saveFileDialog.FileName Dim writer As PdfWriter = New PdfWriter(filePath) Dim pdf As PdfDocument = New PdfDocument(writer) 'ici on essaye le code de stackoverflow et après plusieurs test de résolution, car simplement en A4 ça ne rentre pas on à arrive à pdf.SetDefaultPageSize(New iText.Kernel.Geom.PageSize(New iText.Kernel.Geom.Rectangle(1680, 1200))) Dim document As Document = New Document(pdf) Dim table As iText.Layout.Element.Table = New iText.Layout.Element.Table(DataGridView1.ColumnCount) For Each column As DataGridViewColumn In DataGridView1.Columns Dim cell As Cell = New Cell().Add(New Paragraph(column.HeaderText)) table.AddCell(cell) Next Dim texte As String For Each row As DataGridViewRow In DataGridView1.Rows For Each cell As DataGridViewCell In row.Cells texte = If(cell.Value IsNot Nothing, cell.Value.ToString(), "") table.AddCell(texte) Next Next document.Add(table) document.Close() 'MessageBox.Show("Export to PDF completed successfully!") 'c'est plus pratique pendant le débogge de visualiser directement le fichier Process.Start(filePath) End If
13 janv. 2024 à 19:13
Bonjour
merci de ton aide wishmeril : On y arrive ..
J'ai fait évoluer la solution en 4.8. mais j’obtiens l’erreur
Une exception non gérée du type 'iText.Kernel.Exceptions.PdfException' s'est produite dans itext.kernel.dll
d’où pourrait elle venir ?
13 janv. 2024 à 20:47
Oups !! j'ai honte , je l'avais déjà corrigé sur mon ordi professionnel
Ça fonctionne sans erreur , je vais bidouiller pour que ça rentre en A4 vu que j'aurais que deux affichages : par semaine ou par mois
pdf.SetDefaultPageSize(New iText.Kernel.Geom.PageSize(New iText.Kernel.Geom.Rectangle(1680, 1200)))
En revanche , les couleurs et formats n'ont pas suivi. .
aurais tu une piste?