Inhaltsverzeichnis
25.1.13 Projekt 3 – Datenbank-Report
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.
25.1.13.1 Ergebnisse
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:
- Gezeichnet wird der DB-Report auf einer PDF-Zeichenfläche (CairoPDFSurface).
- Die Anzahl der Felder und die Felder in einer Daten-Tabellenzeile sind fest vorgegeben.
- Auf jeder Seite gibt es eine Tabellen-Kopfzeile mit den Namen der ausgewählten Felder (Spalten). Der Abstand der Felder zueinander basiert auf erprobten Werten.
- Fast alle vertikalen Abstände und die Text-Größen im DB-Report werden über Konstanten festgelegt. Damit ist es möglich, nach dem Zeichnen der 1. Daten-Tabellenzeile auszurechnen, wie viel Seiten der Report hat und wie viele Daten-Tabellenzeilen auf der ersten Seite und den Folgeseiten gezeichnet werden können. Die Kenntnis dieser Werte ermöglicht eine exakte Seitenschaltung.
- Alle Maße werden in Millimeter angegeben oder umgerechnet. Gezeichnet wird in Cairo-Space-Koordinaten (points), wobei die Maße von Millimeter wieder in Punkte umgerechnet werden. Die Vorgehensweise hat sich bereits bei einigen Cairo-Projekten bewährt.
- Der fertige DB-Report als PDF-Datei wird im System-PDF-Reader angezeigt und kann dann sofort ausgedruckt werden.
25.1.13.1 Quelltext-Ausschnitt
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.




