Toolmaker Produkt-Dokumentation

PDF4i Funktionen

Inhaltsübesicht


Die Parameter können in beliebiger Reihenfolge eingegeben werden. Sie sind nicht case sensitive.

Die Muss-Parameter sind fett gedruckt.

PDF_CreateDoc

Mit dieser Funktion wird ein neues PDF-Dokument erzeugt.

Pointer Name eines Adresspointers der im Definitionsteil des RPGLE-Programms mit * beschrieben wird.

*License=Übergibt die Lizenznummer. Wird keine gültige Nummer eingetragen, erscheint auf dem Dokument der Schriftzug www.pdflib.com

*Docname= IFS-Pfad und Name des Dokuments.

*Author=Author des Dokuments. Wird im Reiter PDF-Informationen unter Eigenschaften angezeigt.

*Creator=Erzeuger des Dokuments. Wird im Reiter PDF-Informationen unter Eigenschaften angezeigt

*Title=Titel des Dokuments. Wird im Reiter PDF-Informationen unter Eigenschaften angezeigt

*Searchpath= Default-Pfad für Fonts oder Images etc.

*PDIDoc=Name und Pfad eines Dokuments das vor dem Eröffnen einer Seite eingefügt werden soll. Z. B. Header und Footer-Zeilen oder Firmenlogo etc. Dieses Dokument kann natürlich auch mit unseren Funktionen erstellt werden.

*Dimension=Pixel oder Millimeter. Wird der Parameter weggelassen, werden automatisch Pixel angenommen.

*Direction=Topdown. Wird der Parameter weggelassen oder leer mitgegeben, wird BottomUp angenommen.

*Pagenbr=Zahl. Wird der Parameter verwendet, kann damit eine Seitennummerierung initiiert werden. Dann müssen aber auch die Parameter *PageX und *PageY mitgegeben werden.

*PageX=Horizontale Position der Seitennummer im Dokument. Achtung auf *Dimension und *Direction. Kann mit dem PDI-Dokument abgestimmt werden.

*PageY= Vertikale Position der Seitennummer im Dokument. Achtung auf *Dimension und *Direction. Kann mit dem PDI-Dokument abgestimmt werden.

*Docoptions=Alle im PDFLIB®-Handbuch unter PDF_begin_document möglichen Optionen. Bei FeRD-PDF unbedingt nötig: (*docoptions=pdfa=PDF/A-3b metadata={filename={ZUGFeRD_extension_schema.xmp}})

Beispiel einer Rechnung, die als Template forminv.pdf verwendet.

Handle=PDF_CreateDoc( '(*license='' '') (*Searchpath=/Toolmaker/Fonts) +

(*Docname =/home/Invoice.pdf) (*Creator =RPG) (*Author =Toolmaker) +

(*pdidoc =forminv.pdf) (*dimension =mm) (*direction =topdown) +

(*pagenbr =0) (*pagex =110) (*pagey =290) (*Title =Test invoice) ' );

PDF_CloseDoc

Mit dieser Funktion muss das Dokument geschlossen werden.

PointerName eines Adresspointers der im Definitionsteil des RPGLE-Programms mit * beschrieben wird.

*Pageoptions=Alle in der PDFLIB-Funktion PDF_end_page_ext möglichen Options-Parameter. Siehe PDFLIB Handbuch.

*Docoptions=Alle in der PDFLIB-Funktion PDF_end_page_ext möglichen Options-Parameter. Siehe PDFLIB Handbuch


PDF_NextPage

Mit dieser Funktion wird eine neue Seite im gleichen Dokument erzeugt. Die Einstellungen der Anfangsseite, wie PDI-Dokument oder Seitennummerierung werden übernommen.

Pointer Name eines Adresspointers der im Definitionsteil des RPGLE-Programms mit * beschrieben wird.

*Pagenbr= 0 (Null) wenn die Seitennummerierung nicht weitergezählt werden soll.

PDF_Textflow

Mit dieser Funktion wird ein Fließtext in einen definierten Rahmen gefüllt. Bei Überlauf wird die Funktion PDF_NextPage aufgerufen und der Textfluss fortgesetzt.

PointerName eines Adresspointers der im Definitionsteil des RPGLE-Programms mit * beschrieben wird.

*Flowtext= Fließtext.

*FlowluX= X-Position des Rahmens bei topdown links/oben sonst links/unten.

*FlowluY= Y-Position des Rahmens bei topdown links/oben sonst links/unten.

*FlowrdX= X-Position des Rahmens bei topdown rechts/unten sonst rechts/oben.

*FlowrdY= Y-Position des Rahmens bei topdown rechts/unten sonst rechts/oben.

*Flowcrtopt=Alle in der PDFLIB-Funktion PDF_create_textflow möglichen Options-Parameter. Z. B. Font, Fontsize etc. Siehe PDFLIB Handbuch

*Flowfitopt=Alle in der PDFLIB-Funktion PDF_fit_textflow möglichen Options-Parameter. Siehe PDFLIB Handbuch

Beispiel mit *flowtext als Textfeld ‚text' und *flowcrtopt als Feld ‚crtopt':

d Text s 4096 varying

d CrtOpt s 256 inz('fontname=Helvetica +

d fontsize=8 encoding=unicode +

d fillcolor={gray 0} +

d alignment=justify')

PDF_TextFlow(Handle:'(*flowtext='+text +')' +

'(*flowlux =0,4) +

(*flowluy =2,75) +

(*flowrdx =2) +

(*flowrdy =4,3) +

(*flowwidth =0) +

(*flowheight=0) +

(*flowcrtopt='+crtopt +')');

PDF_Textline

Mit dieser Funktion wird eine Zeichenkette (ein oder mehrere Zeichen oder Wörter) als Textzeile erzeugt.

Pointer Name eines Adresspointers der im Definitionsteil des RPGLE-Programms mit * beschrieben wird.

*Singletext= Text als Konstante oder Feld.

*TextX=Horizontale Position des Textes entsprechend der gewählten Einheiten. (Siehe Dimension).

*TextY=Vertikale Position des Textes entsprechend der gewählten Einheiten und Richtung. (Siehe Dimension und Direction).

*Font= Schriftart.

*Fontsize= Größe der Schrift.

*Fontencoding=Alle in der PDFLIB-Funktion PDF_load_font möglichen Encoding-Parameter. Siehe PDFLIB Handbuch.

*Fontoption=Alle in der PDFLIB-Funktion PDF_load_font möglichen Options-Parameter. Siehe PDFLIB Handbuch.

*Textoption=Alle in der PDFLIB-Funktion PDF_fit_textline möglichen Options-Parameter. Siehe PDFLIB Handbuch.

Beispiel eines Textes, der immer 130 mm vom linken Rand in der Zeile linea steht, die im Programm errechnet wird:

d TxtEUR s 4096 inz('EUR')

d varying

d linea s 5

PDF_TextLine(Handle:'(*singletext='txteur')' +

'(*textx =130) +

(*texty ='linea')' +

'(*textoption =fillcolor={gray 0.5}) +

(*font =arial) +

(*fontencoding=unicode) +

(*fontsize =10)');

PDF_Drawbox

Mit dieser Funktion wird ein Rechteck erzeugt.

Pointer Name eines Adresspointers der im Definitionsteil des RPGLE-Programms mit * beschrieben wird.

*RectX=Horizontale Position des Rechtecks entsprechend der gewählten Einheiten (Siehe Dimension)

*RectY=Vertikale Position des Rechtecks entsprechend der gewählten Einheiten und Richtung. (Siehe Dimension und Direction)

*Rectwidth= Breite des Rechtecks entsprechend der gewählten Einheiten (Siehe Dimension)

*Rectheight=Höhe des Rechtecks entsprechend der gewählten Einheiten und Richtung. (Siehe Dimension und Direction).

*Fillcolor=Farbfüllung des Rechtecks. Zur schnellen Auswahl stehen die Standardfarben rot, grün, blau, cyan, magenta, gelb und schwarz zur Verfügung. Sollte das nicht reichen kann die Originaldefinition der PDF_setcolor-Funktion verwendet werden (z. B. stroke, rgb, 1.0, 0.0, 0.0, 0.0 für rot). Default ist keine Farbfüllung.

*strokecolor=Farbe des Rahmens. Zur schnellen Auswahl stehen die Standardfarben rot, grün, blau, cyan, magenta, gelb und schwarz zur Verfügung. Sollte das nicht reichen kann die Originaldefinition der PDF_setcolor-Funktion verwendet werden (z. B. stroke, rgb, 1.0, 0.0, 0.0, 0.0 für rot). Default ist die evtl. davor schon definierte Strichfarbe oder falls noch nichts definiert war grau.

*Strokewidth=Stärke der Umrandung in Pixel.

Beispiel einer Box mit grünem Rahmen:

PDF_DrawBox(Handle:'(*strokewidth=1) +

(*rectx =20) +

(*recty =130) +

(*StrokeColor=stroke, cmyk, 1.0, 0.0, 1.0, 0.0) +

(*rectwidth =170) +

(*rectheight =20)');

PDF_Drawline

Mit dieser Funktion wird eine Linie gezogen.

Pointer Name eines Adresspointers der im Definitionsteil des RPGLE-Programms mit * beschrieben wird.

{*}StrokefromX= X-Position des Linienbeginns entsprechend der gewählten Dimension und Richtung.

{*}StrokefromY= Y-Position des Linienbeginns entsprechend der gewählten Dimension und Richtung.

{*}StroketoX= X-Position des Linienendes entsprechend der gewählten Dimension und Richtung.

{*}StroketoY= Y-Position des Linienendes entsprechend der gewählten Dimension und Richtung.

{*}Strokewidth= Breite der Linie in Pixel.

{*}Strokecolor= Farbe der Linie. Zur schnellen Auswahl stehen die Standardfarben rot, grün, blau, cyan, magenta, gelb und schwarz zur Verfügung. Sollte das nicht reichen kann die Originaldefinition der PDF_setcolor-Funktion verwendet werden (z. B. stroke, rgb, 1.0, 0.0, 0.0, 0.0 für rot).

Beispiel in mm und Pixel:

PDF_DrawLine(Handle:'(*strokewidth=2) +

(*StrokeColor=blue) +

(*Strokefromx=008) +

(*Strokefromy=25) +

(*Stroketox =205) +

(*Stroketoy =25)');

PDF_Image

Mit dieser Funktion wird ein Bild eingefügt.

Pointer Name eines Adresspointers der im Definitionsteil des RPGLE-Programms mit

*beschrieben wird.

*Image= Pfad und Name des Bildes.

*Imgtype=Type des Bildes. (jpg, tif etc.) Bei Eingabe von ‚auto' wird die Endung des Objekts als Type angenommen.

*ImgX= X-Position des Bildes links/unten im Dokument. Achtung! Auch wenn topdown angegeben ist wird links/unten und nicht links-oben angenommen.

*ImgY= Y-Position des Bildes links/unten im Dokument.

*ImgLopt= Alle in der PDFLIB-Funktion PDF_load_image möglichen Options-Parameter. Siehe PDFLIB Handbuch

*ImgFopt= Alle in der PDFLIB-Funktion PDF_fit_image möglichen Options-Parameter. Siehe PDFLIB Handbuch

Beispiel eines Firmenlogos in 30% seiner Originalgröße am oberen rechten Rand des Dokuments in mm:

PDF_Image(Handle:'(*imgtype=auto) +

(*image =/home/tm_logo.jpg) +

(*imgfopt =scale 0.3) +

(*imgx =140) +

(*imgy =20)');


PDF_FeRDDoc Dokumentwerte

Mit dieser Funktion werden die Daten der PDF-Rechnung in eine XML-Datei umgewandelt.

FeRD-PDF's müssen dem Standard PDF/A-3b entsprechen. Sie müssen daher mir einer Metadata XMP-Datei verknüpft sein. Für die FeRD-Rechnung gibt es die Muster-XMP-Datei ZUGFeRD_extension_schema.xmp die von uns mitgeliefert wird oder aber auch unter http://www.pdflib.com/fileadmin/pdflib/Cookbook/input/ZUGFeRD_extension_schema.xmp zu finden ist.

Damit diese Datei für den Standard PDF/A-3b verknüpft werden kann, muss in der Funktion PDF_CreateDoc der Parameter docoptions mit folgenden Daten übergeben werden:

(*docoptions=pdfa=PDF/A-3b metadata={filename={ZUGFeRD_extension_schema.xmp}})

Wenn nur der XML-Teil wichtig sein soll kann praktisch ein leeres PDF-Dokument mit XML-Teil erstellt werden. Es bedarf dazu neben den FeRD-Funktionen nur der Funktionen PDF_CreateDoc und PDF_CloseDoc.

Die getrimten Werte aus den eingegebenen Parametern werden in eine vorhandene Invoice-XML-Tabelle gefüllt.

Beispiel eines Ausschnitts dieser XML-Datei:

<ram:Name>Musterlieferant GmbH</ram:Name>

-<SellerTradeParty>

-<PostalTradeAddress>

<PostcodeCode>80333</PostcodeCode>

<LineOne>Lieferantenstraße 20</LineOne>

<CityName>München</CityName>

<CountryID>DE</CountryID>

</PostalTradeAddress>

</SellerTradeParty>

Aus dieser Tabelle wird bei PDF_CloseDoc eine XML-Datei im IFS erstellt. Danach wird das PDF-Dokument mit dieser XML-Datei und der vorgefertigten XMP-Datei nach den FeRD-Regeln verknüpft.

Folgende Parameter haben diese Bedeutung:

Parameter Bedeutung

Pointer Name eines Adresspointers der im Definitionsteil des RPGLE-Programms mit*beschrieben wird.

*Docnbr Dokumentnummer

*Doctype Dokumentenart lt. EDIFACT380Rechnung 381Gutschrift

*Docname Dokumentenname

*Docjjjjmmdd Dokumentendatum in der Form jjj.mm.dd

*Sellername Name des Dokumentenausstellers

*Sellerline1 1. Linie der Adresse des Dokumentenausstellers

*Sellerpostcode PLZ des Dokumentenausstellers

*Sellercity Ort des Dokumentenausstellers

*Sellercountry Ländercode des Dokumentenausstellers lt EDIFACT DE etc. default ist DE

*Vatid USt-IdNr.

*Buyername Name der Emfängers

*Buyerline1 1. Linie der Adresse des Empfängers

*Buyerpostcode PLZ des Empfängers

*Buyercity Ort der Empfängers

*Buyercountry Ländercode des Empfängers lt. EDIFACT

*Dlyjjjjmmdd Lieferdatum in der Form jjjj.mm.dd

*Currency Währungscode lt. EDIFACT EUR, USD etc.

*Vatcurrency Mehrwertsteuerwährung (nur wenn abweichenf von Dokumentenwährung)

*Vatbasis Basisbetrag für Mwst

*Vatamount Mehrwertsteuerbetrag

*Vatpercent Prozentbetrag

*Payterm Text Zahlungsvereinbarungen

*Total Rechnungsbetrag gesamt netto

*Tcurrency Gesamtbetragswährung netto (nur wenn abweichend)

*ChargeamountSpesenbetrag

*Chargecurr Währungscode Spesen (nur wenn abweichend)

*Allowance Rabattbetrag

*Acurrency Währungscode Rabatt (nur wenn abweichend)

*Grandtotal Rechnungsbetrag gesamt brutto

*Grandtcurr Währungscode des Rechnungsbetrags brutto (nur wenn abweichend)

Fettgedruckte Parameter sind Mussfelder.

Beispiel:

PDF_FeRDDoc(Handle:'(*Docnbr='renra') +

(*Doctype =380) +

(*Docname =TMS.pdf) +

(*Docjjjjmmddj ='datea') +

(*Sellername ='Sellername') +

(*Sellerline1 ='sellerline1') +

(*SellerPostcode='sellerplz') +

(*Sellercity ='sellercity') +

(*Sellercountry ='sellercountry') +

(*Buyername ='buyername') +

Buyerline1 ='buyerline1') +

(*BuyerPostcode='buyerplz') +

(*Buyercity ='buyercity') +

(*Buyercountry ='buyercountry') +

(*Currency ='curr') +

(*Vatid ='vatid') +

(*Vatpercent='vatpera') +

(*Vatamount='vatamounta') +

(*Payterm ='Termtext') +

(*Total ='totala') +

(*Grandtotal ='gtotala')');


PDF_FeRDItem Artikeldaten

Mit dieser Funktion können Artikelwerte in die XML-Datei eingefügt werden. Dazu muss für jeden Artikel eine Funktion aufgerufen werden.Die Summe der Einzelwerte muss das Total in der PDF_FeRDDoc Funktion ergeben.

Folgende Parameter habe diese Bedeutung:

Parameter Bedeutung

Pointer Name eines Adresspointers der im Definitionsteil des RPGLE-Programms mit*beschrieben wird.

*Docnbr Dokumentnummer

*Docname Dokumentenname

*Doctype Dokumentenart lt. EDIFACT380Rechnung

381Gutschrift

*Docjjjjmmdd Dokumentendatum in der Form jjj.mm.dd

*Itemline Artikelzeilennummer

*temquantity Artikelmenge

*Itemamount Artikelbetrag

*Itemname Artikelbezeichnung

*Itemcurrency Artikelwährung, default ist die Dokumentwährung.

Fettgedruckte Parameter sind Mussfelder.

Beispiel:

PDF_FeRDItem(Handle:'(*docnbr='renra') +

(*Doctype =380) +

(*Docname = TMS.pdf) +

(*Docjjjjmmddj ='datea') +

(*Itemline ='Itemlinea') +

(*Itemname ='Itemname') +

(*Itemquantity ='quantitya') +

(*Itemamount ='Itemamounta')'


PDF_FeRDRetrieve Extraktion der XML-Datei aus einem FeRD-PDF

Mit der neuen Funktion PDF_FeRDretrieve wird die XML-Datei aus einer FeRD-Rechnung extrahiert. Sie wird in einer IFS-XML-Datei gespeichert.

Die Funktion hat 2 Parameter:

*docname Pfad und Name des PDF-Dokuments

*xmlfile Pfad und Name der IFS-Datei.

Beispiel: PDF_FeRDRetrieve((Handle:'(*docname=/tmp/FeRDInv.pdf) +

(*xmlfile=/tmp/ZUGFeRD.xml)';