Das PDF Format ist schon lange Industriestandard für das Austauschen von Dokumenten. Programmiertools für das Erstellen und Drucken von PDF-Inhalten sind meist nur von teuren Drittanbietern zu bekommen. Nachfolgendes kleine VB.NET 2005 WinForms-Projekt soll zeigen, wie einfach man z.B. ein Dataset in eine PDF-Datei schreiben kann. Als Datenquelle verwende ich die Northwind.mdb. Die itextsharp.dll kommt in der aktuellen Version 3.1 zum Einsatz. Erstellen Sie ein neues WinForms Projekt mit folgenden Komponenten auf Ihrem Formular:
Fügen Sie einen Verweis auf die itextsharp.dll hinzu. Nun zum Code. Unsere Imports Anweisungen: Imports System.Data.OleDb Imports iTextSharp.text Imports iTextSharp.text.pdf Imports System.IO Die benötigten privaten Variablen: Private ds As DataSet Private Const TABELLE As String = "Employees" Die Form_Load Routine: Private Sub frmMain_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Me.cmdCreatePDF.Enabled = False End Sub Der Dateiauswahldialog für die Northwind.mdb: Private Sub cmdPath_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdPath.Click Dim opendlg As New OpenFileDialog With opendlg .InitialDirectory = Application.StartupPath .Filter = "Access (*.mdb)|*.mdb" .Title = "Northwind DB" .FileName = "Northwind.mdb" If .ShowDialog = Windows.Forms.DialogResult.OK Then Me.txtPath.Text = .FileName Call LoadDS() End If End With End Sub Die Laderoutine für das Dataset: Private Sub LoadDS() Dim conn As OleDbConnection = Nothing Dim strConn As String = String.Empty Dim adapter As OleDbDataAdapter = Nothing Dim cmd As OleDbCommand = Nothing Dim strSQL As String = String.Empty Try Using conn strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Me.txtPath.Text & ";" conn = New OleDbConnection(strConn) conn.Open() ds = New DataSet strSQL = "SELECT Title, LastName, FirstName, Format(BirthDate, " & _ "'Short Date'), Format(HireDate, 'Short Date') FROM " & TABELLE cmd = New OleDbCommand(strSQL, conn) adapter = New OleDbDataAdapter(cmd) adapter.Fill(ds) Me.gridData.DataSource = ds.Tables(0) End Using Me.cmdCreatePDF.Enabled = True Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Der CreatePDF Aufruf: Private Sub cmdCreatePDF_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdCreatePDF.Click Dim saveDlg As New SaveFileDialog With saveDlg .InitialDirectory = Application.StartupPath .Filter = "PDF (*.pdf)|*.pdf" .Title = "PDF-File" If .ShowDialog = Windows.Forms.DialogResult.OK Then CreatePDF(.FileName) End If End With End Sub Die Routine die sich um das erstellen des PDF-Dokuments kümmert: Private Sub CreatePDF(ByVal strFilename As String) Dim oDoc As Document = Nothing Dim Writer As PdfWriter = Nothing Dim line As Long Dim colPos As Long Dim t As iTextSharp.text.Table = Nothing Dim tCell As Cell = Nothing Try Me.ProgressBar1.Visible = True Me.ProgressBar1.Minimum = 0 Me.ProgressBar1.Maximum = ds.Tables(0).Rows.Count ' --> PDF Document erstellen oDoc = New Document(PageSize.A4, 20, 20, 20, 20) Writer = PdfWriter.GetInstance(oDoc, New FileStream(strFilename, _ FileMode.Create)) Writer.Open() oDoc.Open() ' --> Dokumententitel oDoc.Add(New Paragraph(TABELLE, _ FontFactory.GetFont(FontFactory.TIMES_ROMAN, 14, style:=1))) ' --> ContentTabelle erstellen t = New iTextSharp.text.Table(ds.Tables(0).Columns.Count) t.AutoFillEmptyCells = True t.BorderWidth = 0 t.Border = 0 t.Padding = 5 t.WidthPercentage = 100 Dim zeile As Integer = 0 ' --> Headerzeile erstellen For Each col As DataColumn In ds.Tables(0).Columns tCell = New Cell(col.Caption) tCell.Header = True tCell.BackgroundColor = iTextSharp.text.Color.LIGHT_GRAY tCell.Border = iTextSharp.text.Rectangle.BOTTOM_BORDER t.AddCell(tCell, line, colPos) colPos += 1 Next line += 1 colPos = 0 ' --> Datencontent erstellen For Each row As DataRow In ds.Tables(0).Rows For Each col As DataColumn In ds.Tables(0).Columns tCell = New Cell(row(col.Caption).ToString) tCell.Border = 0 tCell.BorderWidth = 3 t.AddCell(tCell, line, colPos) colPos += 1 Next colPos = 0 line += 1 Application.DoEvents() Me.ProgressBar1.Value += 1 Next ' --> Tabelle an Dokument anfügen oDoc.Add(t) ' --> Objekte schliessen oDoc.Close() Writer.Close() Me.ProgressBar1.Visible = False If MessageBox.Show("Erstellte Datei anzeigen?", "Frage", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question) = _ Windows.Forms.DialogResult.Yes Then Call OpenFile(strFilename) End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Eine Hilfsfunktion für das aufrufen der erstellten PDF-Datei: Private Sub OpenFile(ByVal strFile As String) Try System.Diagnostics.Process.Start(strFile) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Wie Sie sehen können ist es ein leichtes kostenlos PDF-Exporte zu erstellen. Dieser Tipp wurde bereits 33.041 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |