Das Zeichnen von Text sollte vorwiegend für Bezeichnungen von ausgewählten Details einer Zeichnung eingesetzt werden. Eine Ausnahme könnten Texte mit einer klaren Struktur in Form von Zeilen und Spalten bilden – so wie sie zum Beispiel für Tabellen typisch sind. Im Projekt 3 wird Ihnen deshalb ein einfacher Datenbank-Report vorgestellt, der mit Methoden der Klasse Cairo gezeichnet wurde.
Um das Projekt problemlos erproben können, wird Ihnen als Datenbasis eine SQLite3-Datenbank mit der Datenbank-Tabelle 'kontakte' im Projekt-Ordner mitgegeben.
Abbildung 25.1.13.1: Daten-Browser für die DB-Daten
Um eigene Projekte zu realisieren, finden Sie im Projekt 3 'Datenbank-Report' auch eine Kurzanleitung, wie Sie eine SQLite3-Datenbasis erzeugen. In dieser finden Sie dafür auch die notwendigen SQL-Anweisungen.
Der DB-Report als PDF-Datei hat für die erste Seite – gegenüber allen folgenden Seiten – ein unterschiedliches Layout, jedoch für die Daten-Zeilen und die Fußzeile ein gleiches Design. Nur auf der ersten Seite existiert eine Kopfzeile, in der u.a. die Namen der Datenbank und der Datenbank-Tabelle sowie das Druck-Datum angegeben werden:
Abbildung 25.1.13.1.1: DB-Report – 1. Seite
So sehen alle folgenden Seiten aus:
Abbildung 25.1.13.1.2: DB-Report – Seite 2 bis k
Im vorliegenden DB-Report wird nur eine Teilmenge aller Daten angezeigt. Die getroffene Auswahl ist für eine Adress-Liste hinreichend. Wenn Sie jedoch alle Daten anzeigen wollen, dann müssen Sie die SQL-Anweisungen für die DB-Abfrage ändern und sicher auch das PDF-Layout vom Hoch- auf das Querformat umstellen.
In den Fußzeilen wird unter einer abschließenden Linie die Seitenzahl angezeigt:
Abbildung 25.1.13.1.3: Fußzeile
Die in allen oberen Bildern zu sehenden punktierten Linien dienten in der Erprobung nur als Kontroll-Linien und können im fertigen Report entfallen.
Das Zeichnen des DB-Reports mit Methoden der Klasse Cairo basiert auf folgenden Überlegungen:
In der Prozedur ExportPDF() wird der DB-Report unter Verwendung weiterer Prozeduren und Funktionen gezeichnet:
Private Sub ExportPDF() Dim PDFSurface As CairoPdfSurface Dim sPfadPDFDatei, sMessage As String Dim iDataSet As Integer ' Initialisierung iCWidth = PDF_WIDTH - MARGIN_LEFT - MARGIN_RIGHT ' Content-Width (Millimeter) iCHeight = PDF_HEIGHT - MARGIN_TOP - MARGIN_BOTTOM ' Content-Height (Millimeter) iCurrentPage = 1 ' Seitenzahl der aktuellen Seite iCurrentTableRow = 1 ' Anzahl der Tabellenzeilen auf der aktuellen Seite fCurrentY = 0 ' y-Koordinate auf der aktuellen Seite sPfadPDFDatei = User.Home &/ "kontakte.pdf" PDFSurface = New CairoPdfSurface(sPfadPDFDatei, PDF_WIDTH, PDF_HEIGHT) ' DIN A4 - Hochformat Cairo.Begin(PDFSurface) ' Shift of the coordinate origin - >> Left = MARGIN_LEFT, Top = MARGIN_TOP Cairo.Matrix = Cairo.Matrix.Translate(MMToPoints(MARGIN_LEFT), MMToPoints(MARGIN_TOP)) Cairo.Matrix = Cairo.Matrix.Scale(1, 1) ' Zoom-Faktor = 1 Cairo.Font.Name = FONT_NAME GetDBData() ' Bereitstellung der anzuzeigenden DB-Daten (DB-Result) If resDBData.Count = 0 Then sMessage = "<font color='red'><center>Die DB-Auswahl-Menge ist leer.</font>" sMessage &= "<hr>" sMessage &= "Ein DB-Report kann nicht erzeugt werden!</center>" Message.Warning(sMessage) Return Endif ' resDBData.Count = 0 ? DrawHeader() DrawDatabaseInformation() DrawTableHeader() resDBData.MoveTo(0) ' Datensatz-Zeiger auf den ersten Datensatz setzen DrawTableRow() ' Datensatz anzeigen DrawFooter() DrawBorder() ' Nur zu Kontrollzwecken in der Erprobung For iDataSet = 1 To resDBData.Max ' Alle Datensätze (Text) der Auswahlmenge zeichnen If iCurrentPage = 1 Then If iCurrentTableRow = iPage1RowMax Then iCurrentPage = 2 iCurrentTableRow = 0 fCurrentY = 0 Cairo.ShowPage() DrawBorder() ' Nur zu Kontrollzwecken in der Erprobung DrawTableHeader() DrawFooter() Endif resDBData.MoveTo(iDataSet) DrawTableRow() Inc iCurrentTableRow Else If iCurrentTableRow = iPage2RowMax Then Inc iCurrentPage iCurrentTableRow = 0 fCurrentY = 0 Cairo.ShowPage() DrawBorder() ' Nur zu Kontrollzwecken in der Erprobung DrawTableHeader() DrawFooter() Endif resDBData.MoveTo(iDataSet) DrawTableRow() Inc iCurrentTableRow Endif Next ' iDataSet Cairo.End Desktop.Open(sPfadPDFDatei) ' Show DB-Report End ' ExportPDF()
Den vollständigen, umfangreichen Quelltext für das Projekt 3 finden Sie im Download-Bereich in einem Projekt-Archiv.