Modul PDF: Unterschied zwischen den Versionen
Zeile 458: | Zeile 458: | ||
==#pdf_gend== | ==#pdf_gend== | ||
− | + | Beendet ein Grid, indem es unten eine horizontale Linie zieht. | |
'''Parameter''' | '''Parameter''' |
Version vom 25. Januar 2023, 10:04 Uhr
Inhaltsverzeichnis
- 1 PDF
- 1.1 #pdf_start
- 1.2 #pdf_stop
- 1.3 #pdf_text
- 1.4 #pdf_texto
- 1.5 #pdf_font
- 1.6 #pdf_sety
- 1.7 #pdf_checknewline
- 1.8 #pdf_createbarcode
- 1.9 #pdf_insertpic
- 1.10 #pdf_newpage
- 1.11 #pdf_newcol
- 1.12 #pdf_multi
- 1.13 #pdf_multibb
- 1.14 #pdf_drawdef
- 1.15 #pdf_line
- 1.16 #pdf_rect
- 1.17 #pdf_coldef
- 1.18 #pdf_gdef
- 1.19 #pdf_grow
- 1.20 #pdf_gend
- 1.21 $PDF_PAGE()
- 1.22 $PDF_YMM()
- 1.23 Umfangreicheres Beispiel
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
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
- typ - Typ des Barcodes
- code_128 - Code 128 (https://de.wikipedia.org/wiki/Code128)
- qr - QR-Code (https://de.wikipedia.org/wiki/QR-Code)
- code_11 - Code 11 (https://en.wikipedia.org/wiki/Code_11)
- c25_matrix - Standard Code 2 of 5 (https://www.suchymips.de/de/code-matrix.htm)
- c25_inter - 2 of 5 Interleaved (https://www.suchymips.de/de/barcode-2-5-interleaved.htm)
- c25_iata - 2 of 5 IATA (https://www.suchymips.de/de/code-iata.htm)
- c25_logic - Code 2 of 5 Data Logic (https://www.suchymips.de/de/datalogic.htm)
- c25_ind - Code 2 of 5 Industrial (https://www.suchymips.de/de/barcode-2-5.htm)
- code_39 - Code 3 of 9 (Code 39) (https://www.suchymips.de/de/code-39.htm)
- code_39ex - Extended Code 3 of 9 (Code 39+) (https://www.suchymips.de/de/code-39-extended.htm)
- eanx - EAN (https://www.suchymips.de/de/ean-upc.htm)
- ean128 - GS1-128 (UCC.EAN-128) (https://www.suchymips.de/de/barcode-lexikon-uebersicht-e.htm)
- code_bar - Codabar (https://www.suchymips.de/de/codabar.htm)
- dp_leit - Deutsche Post Leitcode (https://de.wikipedia.org/wiki/Leitcode)
- dp_ident - Deutsche Post Identcode (https://www.activebarcode.de/codes/identcode.html)
- code_16k - Code 16K (https://de.wikipedia.org/wiki/Code_16K)
- code_49 - Code 49 (https://de.wikipedia.org/wiki/Code_49)
- code_93 - Code 93 (https://www.suchymips.de/de/code-93.htm)
- code_flat - Flattermarken
- 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)
- 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"