Afdrukken met Visual Basic 2008 André Obelink www.maryor.nl | www.obelink.com Over mezelf… • MarYor | software & consultancy • Auteur van artikelen en boeken – Geschreven voor Microsoft .NET Magazine, PC Active, MSDN Magazine Europe, SDN Magazine, VB Magazine – Boek: Visual Basic 2005 – de Basis (9/2006) – Boek: Visual Basic Kookboek (3/2008) – Boek: Visual Basic 2008 – de Basis (8/2008) – Boek: C# Kookboek (co-auteur, verwacht maart 2009) • Actief binnen de ontwikkelaarsgemeenschap • Sinds 2006 Microsoft MVP voor Visual Basic Agenda • Vrij afdrukken – PrintDocument, PrintPreviewDialog, PageSetupDialog • Printers en printerinstellingen – PrinterSettings, standaard printer • Afdrukken van lijsten (database) – Microsoft.Reporting, LocalReport, ReportViewer, .. • Visual Basic 6 – Printer, PrintForm PrintDocument • PrintDocument class. Belangrijke methoden, properties en events zijn: • Methoden - Print() • Eigenschappen - DefaultPageSettings, DocumentName, PrinterSettings • Events - BeginPrint(), EndPrint(), PrintPage(), QueryPageSettings() Events PrintDocument Volgorde Event Omschrijving 1 BeginPrint() Gebruik dit event om eventuele datastructuren op te bouwen of verbindingen naar een database te leggen. 2 QueryPageSettings() Gebruik dit event om eventuele paginainstellingen te wijzigen. Denk hierbij aan marges of bijvoorbeeld de afdrukstand. 3 PrintPage() Gebruik dit event om de feitelijke afdrukcode in te plaatsen. Wanneer dit event geen code bevat, zal er ook niets worden afgedrukt. 4 EndPrint() Gebruik dit event om gebruikte variabelen op te ruimen en eventuele verbindingen naar database(s) netjes af te sluiten. PrintPage() event Private WithEvents _PrintDocument As New PrintDocument Private Sub _PrintDocument_PrintPage(ByVal sender As Object, _ ByVal e As PrintPageEventArgs) _ Handles _PrintDocument.PrintPage Dim lettertype As New Font("Arial", 24) e.Graphics.DrawString("Hallo!", lettertype, Brushes.Black, 100, 100) End Sub Private Sub PrintButton_Click() Handles PrintButton.Click _PrintDocument.Print() End Sub Demo PrintDocument en PrintPreviewDialog Afdrukken over meerdere pagina’s • Vang het PrintPage() event af • Bereken hoe groot het printbare gebied is • hou rekening met afdrukstand, marges… • Bereken hoeveel karakters er in passen • gebruik hiervoor de methode e.Graphics.MeasureString() • Print het bewuste aantal karakters • Indien nog niet alle karakters geprint zijn… stel de eigenschap e.HasMorePages in op True PrintPage() • Doorloop alle stappen tot alle tekst afgedrukt is Demo Afdrukken meerdere pagina’s Pagina-instellingen • Gebruik PageSetupDialog • Stel eigenschap PageSetupDialog.PageSettings in op de huidige pagina-instellingen van het PrintDocument • Toon het dialoogkader • Stel eigenschap PrintDocument.DefaultPageSettings in op PageSetupDialog.PageSettings Demo PageSetupDialog Printerinstellingen • Gebruik PrintDialog • Stel eigenschap PrintDialog.Document in op het PrintDocument dat geprint moet worden • Toon het dialoogkader • Indien de gebruiker op OK heeft geklikt, roep de PrintDocument.Print() methode aan Demo PrintDialog VB6 – Printer.Print() • Voor backwards compatibiliteit met VB6 is er een alternatief – Printer object • Microsoft Visual Basic PowerPacks • Gebruik weer methoden en eigenschappen als: • Print() • CurrentX en CurrentY • Circle() • EndDoc() Code Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6.Printer PrintForm • Een andere oude bekende uit het VB6 tijdperk: de PrintForm class • Microsoft Visual Basic PowerPacks • Handig voor een 1:1 dump van een formulier • Stel eigenschappen in zoals: • DocumentName • Form • PrintAction • Roep methode Print() aan Demo PrintForm Report • Namespace Microsoft.Reporting • Microsoft.Reporting.WinForms • Microsoft.Reporting.WebForms • LocalReport (.rdlc) en ServerReport • Met name gericht op database reporting Demo Microsoft.Reporting Alternatieven • Afdrukken met standaard Visual Basic is sterk verbeterd, maar voor veel projecten minder geschikt… • Business Objects Crystal Reports • DataDynamics ActiveReports • DevExpress XtraReports • Telerik Reporting (Indien nog wat tijd over…) Demo DataDynamics ActiveReports 3.0 Professional Vragen? Bedankt voor uw aandacht! [email protected]