PDF-Erzeugung – Teil 2

Vor der Textausgabe

Bevor Sie dann allerdings Text ausgeben, sollten Sie die Füllfarbe wieder auf Schwarz zurücksetzen. Die Schrift wäre sonst in der gleichen Farbe und auf dem Hintergrund nicht sichtbar. Dazu rufen Sie einfach wieder die Methode PDFPAGE_SetGrayFill auf und übergeben als Wert 0. Nun fehlen noch die Linien. Es soll unterhalb der Überschrift und am Ende der Liste als Abschluss eine Linie gezeichnet würde. Linien zeichnen Sie mit der PDFPAGE_LineTo-Methode. Allerdings können Sie der Methode nur die Zielposition übergeben. Die Anfangsposition sowie die Eigenschaften der Linie müssen Sie zuvor festlegen. Die PDFPAGE_MoveTo-Methode setzt die aktuelle Ausgabeposition, an der die Linie beginnt. Mit PDFPAGE_SetGrayStroke können Sie einen Grauton für die Linie festlegen, und die Methode PDFPAGE_Stroke sorgt nach dem Zeichnen der Linie dafür, dass die Linie mit der gesetzten Rahmenfarbe gezeichnet wird.

Ein Problem sind noch mögliche Laufzeitfehler. Wenn es aus irgendeinem Grund dazu kommt, dass die Codeausführung abgebrochen wird, nachdem die Datei mit BeginDoc geöffnet und bevor sie mit EndDoc wieder geschlossen wurde, führt das dazu, dass die Datei in Windows noch als geöffnet markiert ist. Sie können sie dann weder beim nächsten Start überschreiben noch löschen, auch nicht umbenennen oder verschieben. Daher ist es ganz wichtig, dass Sie in einer Fehlerbehandlungsroutine dafür sorgen, dass bei Auftreten eines Laufzeitfehlers das Dokument geschlossen wird, bevor Sie die Prozedur verlassen. Nach Aufruf der BeginDoc-Methode müssen Sie dazu die Anweisung On Error Goto FEHLER einfügen. Am Ende, direkt vor der End- Doc-Methode, definieren Sie dann noch die Sprungmarke FEHLER.

Bild 2: Die erzeugte Liste.
Bild 2: Die erzeugte Liste.

Sub ListeAusgeben()
Dim strSQL As String
Dim objPDF As PDFCreatorPilot2.piPDFDocument
Dim objRS As ADODB.Recordset
Set objRS = New ADODB.Recordset
Set objPDF = New piPDFDocument
Dim strName As String
Dim lngX As Long
Dim lngY As Long
Dim objFeld As ADODB.Field
Dim lngZeile As Long
lngZeile = 0
...
If objRS.RecordCount > 0 Then
...
Do While objRS.EOF = False
lngY = lngY + (14 * lngZeilenabstand)
'Rechteck ausgeben
lngZeile = lngZeile + 1
If lngZeile Mod 2 Then
.PDFPAGE_SetGrayFill 0.9
Else
.PDFPAGE_SetGrayFill 1
End If
.PDFPAGE_Rectangle 0, lngY - 2,
.PDFPAGE_Width, lngY - 2 + (14 * lngZeilenabstand)
.PDFPAGE_Fill
.PDFPAGE_SetGray 0
'alle Felder durchlaufen
For Each objFeld In objRS.Fields
.PDFPAGE_TextBox lngX, lngY, lngX + (.PDFPAGE_Width \ _
objRS.Fields.Count), lngY + 14, objFeld.Value, hjLeft, vjCenter
lngX = lngX + (.PDFPAGE_Width \ objRS.Fields.Count)
Next objFeld
lngX = 10
objRS.MoveNext