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]