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)';