Modul PDF

Aus bafbal.de
Zur Navigation springen Zur Suche springen

PDF

Im Modul PDF werden die Routinen zusammengefasst, die zur Erstellung von PDF-Dateien verwendet werden.

Allgemeines

  • #pdf_start - Dokument beginnen
  • #pdf_stop - Dokument beenden und speichern

Text ausgeben

  • #pdf_text - Textzeile
  • #pdf_texto - Text ohne neue Zeile
  • #pdf_multi - mehrzeiliger Text
  • #pdf_multibb - mehrzeiliger Text mit Pseudo-BB-Code
  • #pdf_font - Font setzen

Bilder und Linien

  • #pdf_loadpic - Bild laden
  • #pdf_insertpic - Bild einfügen
  • #pdf_line - Linie zeichnen
  • #pdf_createbarcode - Barcodes erstellen

Positionierung

  • #pdf_sety - Y-Position setzen
  • #pdf_checknewline - Neue Zeile beginnen mit Prüfung auf Spalten- oder Seitenumbruch
  • #pdf_newpage - Neue Seite beginnen
  • #pdf_newcol - Neue Spalte beginnen
  • #pdf_coldef - Spaltendefinition
  • $PAGE()
  • $YMM()

Beispiel


#pdf_start

Beginnt ein PDF-Dokument.

Derzeit wird nur das Format DIN A4 im Hoch- oder Querformat unterstützt.

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • fn ("FileName") - dateiname, unter dem das Dokument gespeichert wird; Funktionen werden ersetzt. Ist der Parameter leer, so wird ein Dateiauswahldialog geöffnet.
  • pal (PageLandscape) - Wenn Y, dann wird die Seite im Querformat erstellt; Default N; Funktionen werden ersetzt
  • tfn (temporary file name) - Wenn gesetzt, dann wird die Datei zunächst unter diesem Dateinamen erzeugt und erst bei #pdf_stop auf den Dateinamen fn gesetzt. Benötigt wird dies, wenn in Verzeichnissen erzeugt wird, in denen Prozesse automatisch Dateien verarbeiten (die sich dann gegebenenfalls unvollständige Dateien greifen könnten). Mit tfn kann vorübergehend ein Dateiname verwendet werden, der bei der Verarbeitung ignoriert wird, oder die Datei vorübergehend in einem anderen Verzeichnis erzeugt werden. Funktionen werden ersetzt.

Beispiel

#pdf_start  fn=$DIR(doc)\test.pdf
#pdf_text  c="Hello World"
#pdf_stop

#pdf_stop

Beendet das PDF-Dokument und speichert es.

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • o ("open") - Wenn Y, wird das PDF-Dokument nach der Erstellung geöffnet; default N; Funktionen werden ersetzt

Beispiel

#pdf_start  fn=$DIR(doc)\test.pdf
#pdf_text  c="Hello World"
#pdf_stop

#pdf_text

Fügt eine Textzeile ein.

Parameter

  • a ("align") - Ausrichtung des Textes
    • c ("center") - zentriert
    • d2 - rechtsbündig auf zwei Dezimalstellen
    • d4 - rechtsbündig auf vier Dezimalstellen
    • l - linksbündig
    • r - rechtsbündig
  • c ("caption") - Text, der ausgegeben werden soll; Funktionen werden ersetzt
  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • grp ("group") - Gruppenwert; wenn dieser Wert vom vorherigen abweicht, dann wird eine neue Gruppe begonnen; Funktionen werden ersetzt
  • l - Linker Rand; Funktionen werden ersetzt; Default 18mm
  • mb ("margin bottom") - Wird nach dem Zeilenumbruch dieser untere Rand unterschritten, dann wird eine neue Spalte beziehungsweise neue Seite begonnen; Funktionen werden ersetzt; default 15 mm.
  • r - Rechter Rand; Funktionen werden ersetzt; Default 15mm


Beispiel

#pdf_text c="Dies ist ein Test"   l=30   r=100   a=c

#pdf_texto

Wie #pdf_text, mit dem Unterschied, dass kein Zeilenvorschub erfolgt.

Parameter

siehe #pdf_text

Beispiel

#pdf_texto   c="Eine Beispielzeile mit "
#pdf_font   b=Y
#pdf_text   l=53   c="einem Font-Wechsel "

#pdf_font

Setzt den Font für die Textaufgabe.

Parameter

  • b ("bold") - Wenn Y, dann wird der Font fett dargestellt.
  • cl ("color") - Farbe, als Hex-Wert oder als Farbkonstante
  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • i ("italic") - Wenn Y, dann wird der Font kursiv dargestellt.
  • n ("name") - Name der Schriftart; Default ist Helvetica
  • s ("size") - Größe der Schriftart in typographischen Punkt; Funktionen werden ersetzt; Default 10. Die Zeilenhöhe ist 120% der Schriftgröße

Beispiel

#pdf_font   s=12   b=Y

#pdf_sety

Setzt die Y-Position.

Bei der Ausgabe mit #pdf_text haben wir einen automatischen Zeilenvorschub. Sollen jedoch Absätze eingefügt werden, dann muss die Y-Position entsprechend verändert werden.

Der 0-Punkt bei PDF liegt in der linken, oberen Ecke. Die untere Ecke bei einem stehenden DIN A4-Blatt liegt also bei 297 mm, die Y-Position erhöht sich also laufend, wenn das Blatt von oben nach unten beschrieben wird.

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • d ("distance") - Reduziert den Y- Wert um den angegebenen Wert in mm; Funktionen werden ersetzt.
  • y - Setzt die Y-Position als absoluten Wert in mm; Funktionen werden ersetzt.

Beispiel

#pdf_text Zeile 1
#pdf_text Zeile 2
#pdf_sety   d=5
#pdf_text Neuer Absatz
#pdf_text weitere Zeile

#pdf_checknewline

Fügt eine neue Zeile ein. Liegt die Position dann unter dem unteren Rand, wird eine neue Spalte beziehungsweise eine neue Seite begonnen.

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • mb ("margin bottom") - Unterer Rand in mm; wird dieser Wert unterschritten, dann wird eine neue Spalte beziehungsweise eine neue Seite begonnen. Funktionen werden ersetzt; default ist 20.

Beispiel

#pdf_checknewline   mb=15

#pdf_createbarcode

Erzeugt einen Barcode und fügt ihn in das PDF ein.

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • d ("distance") - Abstand zwischen Text und Bild in mm; Default 0; Funktionen werden ersetzt. Parameter wird nur bei relativer Positionierung berücksichtigt.
  • fn ("FileName") - Wenn gesetzt, wird das interne Bitmap nach der Rotation unter diesem Dateinamen gespeichert. Primär für Debugging; Funktionen werden ersetzt
  • h - Höhe des Bildes; Funktionen werden ersetzt; Funktionen werden ersetzt.
  • rot - Rotation; default 0; Funktionen werden ersetzt; eignet sich primär für 90, 180 und 270
  • sx ("size x") - Breite des internen Bitmaps in Pixeln; Funktionen werden ersetzt; default 800
  • sy ("size y") - Höhe des internen Bitmaps in Pixeln; Funktionen werden ersetzt; default 800
  • w - Breite (und Höhe) des internen Bildes; default 800; Funktionen werden ersetzt
  • x - X-Position des Bildes; Funktionen werden ersetzt.
  • y - Y-Position des Bildes; Funktionen werden ersetzt.
  • z - Wert, der als Barcode angezeigt wird; Funktionen werden ersetzt. Bitte die Beschränkungen des jeweiligen Barcodes beachten.

Beispiel

#pdf_createbarcode   typ=code_128   z=$VAL(1)   rot=90   x=202    y=180   w=5   h=80   sx=800   sy=16   fn_=c:\temp\barcode.bmp

#pdf_insertpic

Mit #pdf_insertpic wird ein Bild geladen und in das PDF eingefügt.

Das Bild kann vertikal absolut positioniert werden, indem der Parameter y gesetzt wird. Ist der Parameter y nicht gesetzt, so wird das Bild relativ gesetzt, also unter den Text gesetzt. In diesem Fall werden die Parameter d und mb berücksichtigt.

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • d ("distance") - Abstand zwischen Text und Bild in mm; Default 0; Funktionen werden ersetzt. Parameter wird nur bei relativer Positionierung berücksichtigt.
  • fn ("FileName") - Dateiname der Datei, aus welcher das Bild geladen wird.
  • h - Höhe des Bildes; Funktionen werden ersetzt.
  • mb ("margin bottom") - Unterer Rand. Würde bei relativer Positionierung dieser Rand unterschritten, so wird eine neue Spalte beziehungsweise neue Seite begonnen.
  • w ("width") - Breite des Bildes in mm; Funktionen werden ersetzt.
  • x - X-Position des Bildes; Funktionen werden ersetzt.
  • y - Y-Position des Bildes; Funktionen werden ersetzt. Wenn der Parameter y gesetzt ist, wird das Bild absolut positioniert und die Parameter d und mb bleiben unberücksichtigt.

Beispiel

#pdf_insertpic  w=60   h=40   x=50  y=50   fn=i:\temp\logo_firma.BMP

#pdf_newpage

Beginnt eine neue Seite

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt

Beispiel

#pdf_newpage

#pdf_newcol

Beginnt eine neue Spalte. Wenn es sich bereits um die letzte Spalte auf der Seite handelt, dann wird eine neue Seite begonnen.

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt

Beispiel

#pdf_newcol

#pdf_multi

Fügt einen Text ein, die Zeilen werden erforderlichenfalls umgebrochen.

Parameter

  • a ("align") - Ausrichtung des Textes
    • c ("center") - zentriert
    • l - linksbündig
    • j ("join") - Blocksatz
    • r - rechtsbündig
  • c ("caption") - Text, der ausgegeben werden soll; Funktionen werden doppelt ersetzt
  • cn ("caption no") - Text, der ausgegeben werden soll; Funktionen werden nicht doppelt ersetzt
  • cl ("color") - Schriftfarbe; Default schwarz
  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • d ("distance") - Abstand der Absätze, default halbe Schriftgröße
  • grp ("group") - Gruppenwert; wenn dieser Wert vom vorherigen abweicht, dann wird eine neue Gruppe begonnen; Funktionen werden ersetzt
  • l - Linker Rand; Funktionen werden ersetzt; Default 18mm
  • mb ("margin bottom") - Wird nach dem Zeilenumbruch dieser untere Rand unterschritten, dann wird eine neue Spalte beziehungsweise neue Seite begonnen; Funktionen werden ersetzt; default 15 mm.
  • mbp ("margin bottom paragraph") - Wird nach dem Zeilenumbruch dieser untere Rand unterschritten, und handelt es sich um eine leere Zeile, dann wird eine neue Spalte beziehungsweise neue Seite begonnen; Funktionen werden ersetzt; default 15 mm. (Mit diesem Parameter kann bewirkt werden, dass ein Spalten- oder Seitenumbruch ein wenig vorgezogen wird, damit nicht eine einzelne oder einige wenige einzelne Zeilen am Ende einer Spalte oder Seite stehen bleiben.)
  • s ("size") - Schriftgröße; Funktionen werden ersetzt, Default 10
  • r - Rechter Rand; Funktionen werden ersetzt; Default 15mm

Beispiel

#pdf_multi   mb=15   mbp=22   c=$TEXT(3)

#pdf_multibb

Wie #pdf_multi, allerdings werden Pseudo-BB-Codes interpretiert.

Codes Fontweight

  • [/b] - Font normal
  • [b] - Font fett / bold
  • [b=thin]
  • [b=extralight]
  • [b=light]
  • [b=normal]
  • [b=medium]
  • [b=semibold]
  • [b=bold]
  • [b=extrabold]
  • [b=black]
  • [b=extrablack]

Codes Fontsland

  • [/i] oder [i=upright] - aufrecht / Upright
  • [i] oder [i=italic] - kursiv / Italic
  • [i=oblique]

Codes Align

  • [a=l] linksbündig
  • [a=r] rechtsbündig
  • [a=c] zentriert
  • [a=j] Blocksatz

Codes Schrift

  • [s=12] - Schriftgröße 12 Punkt (auch andere Größen möglich)
  • [cl=red] - Schriftfarbe rot (auch andere Farben möglich)
  1. pdf_drawdef

Definiert die Werte für Zeichenoperationen

Parameter

  • cl ("color") - Farbe, als Hex-Wert oder als Farbkonstante
  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • w ("width") - Breite des Stiftes; Funktionen werden ersetzt, default 1
  • y - Typ der operation
    • stroke - Umriss
    • fill - Füllung
    • strokeandfill oder both - Umriss und Füllung

Beispiel

#pdf_drawdef    cl=red
#pdf_line   x1=30   x2=150   y1=250   y2=200   w=1
#pdf_line    w=0,1   d=5


#pdf_drawdef

Definiert Werte vor dem Zeichnen einer Linie

Parameter

  • cl ("color") - Farbe der Zeichenoperation; Default schwarz
  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • w ("width") - Breite des Stiftes
  • y - Typ
    • stroke - nur Umriss
    • fill - Füllung
    • strokeandfill oder both - Umriss und Füllung


Beispiel

#pdf_drawdef    cl=red   w=3
#pdf_line   x1=30   x2=150   y1=250   y2=200   w=1
#pdf_line    w=0,1   d=5

#pdf_line

Zeichnet eine Linie

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • d ("distance") - Verändert vor dem Zeichnen der Linie die aktuelle Y-Position; default 0
  • x1 - X-Position des Start-Punktes als Distanz vom linken Rand; default 18 mm
  • x2 - X-Position des End-Punktes als Distanz vom rechten Rand; default 15 mm
  • y1 - Y-Position des Start-Punktes; default aktuelle Y-Position
  • y2 - Y-Position des End-Punktes; default aktuelle Y-Position

Beispiel

#pdf_drawdef    cl=red   w=3
#pdf_line   x1=30   x2=150   y1=250   y2=200   w=1
#pdf_line    w=0,1   d=5


#pdf_rect

Zeichnet eine geometrische Figur

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • d ("distance") - Verändert vor dem Zeichnen der Linie die aktuelle Y-Position; default 0
  • h - Höhe; Funktionen werden ersetzt, default 0
  • j - Typ (y ist bereits belegt...); default rect
    • rect oder rectangle - Rechteck
    • round oder roundrect - Rechteck mit abgerundeten Ecken
    • circle oder oval - Ellipse
  • rad ("radius") - Radius bei roundrect; Funktionen werden ersetzt, default 1
  • w - Breite; Funktionen werden ersetzt, default 0
  • x - X-Position als Distanz vom linken Rand; Funktionen werden ersetzt, default 0
  • y - Y-Position als Distanz vom linken Rand; Funktionen werden ersetzt, default 0


Beispiel

#pdf_drawdef    cl=red   w=3
#pdf_rect   x=30   y=150   w=250   h=200

#pdf_coldef

Richtet auf der Seite mehrere Spalten ein.

Parameter

  • cc ("ColumnCount") - Anzahl der Spalten; default 1; Funktionen werden ersetzt.
  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • l - Linker Rand in mm; default 18mm; Funktionen werden ersetzt.
  • r - Linker Rand in mm; default 15mm; Funktionen werden ersetzt.
  • ws ("WhiteSpace") - Horizontaler Spaltenabstand; default 7mm; Funktionen werden ersetzt.

Beispiel

#pdf_coldef  cc=2   ws=7


#pdf_gdef

Definiert die Werte für ein Grid

Parameter

  • cc ("ColumnCount") - Anzahl der Spalten; default 1; Funktionen werden ersetzt.
  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • cw ("ColumnWidth") - Breite der einzelnen Spalten (also cw1, cw2, cw3...); default 10, Funktionen werden ersetzt
  • d ("distance") - Verändert vor dem Zeichnen der Linie die aktuelle Y-Position; default 0, Funktionen werden ersetzt
  • h ("height") - Default-Höhe der Reihe in mm; default 10, Funktionen werden ersetzt
  • l ("left") - Linker Rand in mm des Grid vom linken Blattrand; default 18, Funktionen werden ersetzt
  • ml ("margin left") - Default-Abstand in mmd es Textes im Grid von der linken Linie des Gitters (Linienmitte); default 1, Funktionen werden ersetzt
  • mr ("margin right") - Default-Abstand in mm des Textes im Grid von der rechten Linie des Gitters (Linienmitte); default 1, Funktionen werden ersetzt
  • mt ("margin top") - Default-Abstand in mm des Textes im Grid von der oberen Linie des Gitters (Linienmitte); default 1, Funktionen werden ersetzt

Beispiel

#pdf_gdef   cc=3   cw1=50   cw2=60   cw3=70  
#pdf_grow   c1=eins   c2="[b]zwei"   c3=drei   a3=r
#pdf_grow   c1=eins   c2="[b]zwei"   cs2=2   c3=drei   a3=r
#pdf_grow   c1=[s=12]eins   cs1=3   c2="[b]zwei"   c3=drei   a3=r
#pdf_gend

#pdf_grow

Fügt dem Grid eine Zeile hinzu und setzt die Werte der einzelnen Zellen

Parameter

  • a ("align") - Ausrichtung (c, l, j, r) des Textes in der Zelle; je nach Zelle a1, a2, a3...; default ist l
  • c ("caption") - Text der Zelle, sofern cn nicht gesetzt; es können Pseudo-BB-Codes verwendet werden, siehe #pdf_multibb und Beispiel; je nach Zelle c1, c2, c3...; Funktionen werden ersetzt
  • cl ("color") - Farbe des Textes in des Zelle; je nach Zele cl1, cl2, cl3...; default ist black
  • cn ("caption no") - Text der Zelle; es können Pseudo-BB-Codes verwendet werden, siehe #pdf_multibb und Beispiel; je nach Zelle cn1, cn2, cn3...; Funktionen werden nicht (!) ersetzt
  • cs ("ColSpan") - Gibt an, wie viele Spalten die Zelle überspannt; default 1, Funktionen werden ersetzt
  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt
  • h ("height") - Höhe der Zeile in mm; default ist der Wert h von #pdf_gdef, Funktionen werden ersetzt
  • ml ("margin left") - Abstand in mm des Textes im Grid von der linken Linie des Gitters (Linienmitte); je nach Zelle ml1, ml2, ml3...; default ist der Wert ml von #pdf_gdef, Funktionen werden ersetzt
  • mr ("margin right") - Abstand in mm des Textes im Grid von der rechten Linie des Gitters (Linienmitte); je nach Zelle mr1, mr2, mr3...; default ist der Wert mr von #pdf_gdef, Funktionen werden ersetzt
  • mt ("margin top") - Abstand in mm des Textes im Grid von der oberen Linie des Gitters (Linienmitte); je nach Zelle mt1, mt2, mt3...; default ist der Wert mt von #pdf_gdef, Funktionen werden ersetzt
  • s ("size") - Größe der Schriftart in Punkt; je nach Zelle s1, s2, s3...; default ist 10, Funktionen werden ersetzt

Beispiel

Siehe #pdf_gdef

#pdf_gend

Beendet ein Grid, indem es unten eine horizontale Linie zieht.

Parameter

  • cnd ("condition") - Wenn Y, wird die Prozedur ausgeführt; default Y, Funktionen werden ersetzt

Beispiel

Siehe #pdf_gdef

$PDF_PAGE()

Gibt die aktuelle Seitenzahl zurück

Parameter

(keine)

Beispiel

#pdf_text a=r   c="Seite $PDF_PAGE()"

$PDF_YMM()

Gibt die Y-Position in mm zurück

Parameter

(keine)

Beispiel

#pdf_line   x1=30   x2=150   y1=$PDF_YMM()   y2=$PDF_YMM()   w=1   cl=red


Umfangreicheres Beispiel

Erläuterung im Video: PDFs erstellen (8:11)

#frm  c="c_test_pdf"   y=console

#pdf_start   fn=$DIR(doc)test.pdf 

#pdf_font   b=Y
#pdf_texto   c=Login
#pdf_texto   c=Vorname  l=80
#pdf_text   c=Nachname   l=120
#pdf_sety   d=2
#pdf_font   b=N

#cmd #pdf_texto   c=$DATA(dat,login)
#cmd #pdf_texto   c=$DATA(dat,firstname)  l=80
#cmd #pdf_text   c=$DATA(dat,lastname)   l=120

#sql select login, firstname, lastname from user_user
#sql_open   n=dat   er=1 

#pdf_insertpic   w=60   h=40   x=18   y=50   fn=i:\temp\bafbal_big.png
#pdf_createbarcode   typ=qr   z=https://bafbal.de   x=100   y=50   w=40   h=40   sx=800

#pdf_sety   y=100
#text Dies ist ein Text mit mehreren Zeilen
#text mit [b]fett[/b] und [i]kursiv[/i][a=r]
#text auch mal eine Zeile rechtsbündig[a=l]
#text [s=18]sowie größer und [cl=red]in Farbe.
#pdf_multibb   c=$TEXT(1)

#pdf_stop   o=Y

#cout  c="c_test_pdf executed"