Inhaltsübersicht
Table of Contents | ||
---|---|---|
|
Das Musterprogramm FORMINV
Im ersten Musterprogramm wird ein Rechnungsformular erzeugt, das für die Rechnungsschreibung als Schablone dient. Das zweite Programm füllt die Rechnungsdaten in diese Schablone. Die Quellen stehen in DIRWEB/QRPGLESRC/FORMINV bzw. INVOICE.
Rechnungsformular:
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
********************************************************************************************** * Program :FormInv * Descriptions :Form of invoice * Programmer :Toolmaker * Creation Date :01.07.2014 ********************************************************************************************** * H E A D E R - S P E C I F I C A T I O N S ********************************************************************************************** H/COPY Qcpylesrc,H_SPECSPDF ********************************************************************************************** * F I L E S P E C I F I C A T I O N S ********************************************************************************************** ********************************************************************************************** * P R O T O T Y P I N G / C O P Y M E M B E R ********************************************************************************************** D/Include Qprolesrc,pdfsrvpgm * ********************************************************************************************** * D E F I N I T I O N G L O B A L V A R I A B L E S ********************************************************************************************** d Handle s * d Font s 256 inz('Helvetica-Bold') varying d Encoding s 256 inz('unicode') varying d FontOpt s 256 inz(' ') d CrtOpt s 256 inz('fontname=Helvetica + d fontsize=8 encoding=unicode + d fillcolor={gray 0} + d alignment=justify') d Fontsize s 6s 0 inz(08) d Ftext s 4096 inz('Toolmaker Advanced + d Efficiency GmbH') d Ftext1 s 4096 inz('Westendstrasse 34') d Ftext2 s 4096 inz('86916 Kaufering') d Ftext3 s 4096 inz('Tel.: 0049 8191 968 0') d sender s 4096 inz('Toolmaker Advanced Efficiency + d GmbH, Westendstr. 34, + d 86916 Kaufering') d TxtKdnr s 4096 inz('Kundennummer') d TxtRenr s 4096 inz('Rechnungsnummer') d Txtdate s 4096 inz('Datum') d AText s 4096 inz('Der Rechnungsbetrag ist + d innerhalb von 14 Tagen netto + d zahlbar. Die Produkte bleiben bis + d zur vollständigen Bezahlung + d unser Eigentum. Es gelten unsere + d allgemeinen Geschäftsbedingungen.') ********************************************************************************************** * M A I N P R O G R A M ********************************************************************************************** /Free Handle=PDF_CreateDoc('(*license='' '') + (*Searchpath= + /Toolmaker/Fonts/DirectWEB/htdocs/pdf4iexamples/fonts) + (*Docname =/home/gsc + /Toolmaker/DirectWEB/htdocs/pdf4iexamples/resdoc/Testform.pdf)' + '(*Creator =RPG) + (*Author =GerdMax SchrammMaus) + (*dimension =mm) + (*direction =topdown) + (*Title =Header for documents)'); PDF_Image(Handle:'(*imgtype=auto) + (*image =/home/gsc + /Toolmaker/DirectWEB/htdocs/pdf4iexamples/images/tm_logo.jpg) + (*imgfopt =scale 0.3) + (*imgx =140) + (*imgy =20)'); PDF_DrawLine(Handle:'(*strokewidth=2) + (*StrokeColor=blue) + (*Strokefromx=008) + (*Strokefromy=25) + (*Stroketox =205) + (*Stroketoy =25)'); PDF_TextLine(Handle:'(*singletext='+sender+')' + '(*textx =25) + (*texty =60) + (*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =06)'); PDF_TextLine(Handle:'(*singletext='+ftext+')' + '(*textx =150) + (*texty =60) + (*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =08)'); PDF_TextLine(Handle:'(*singletext='+ftext1+')' + '(*textx =150) + (*texty =65) + (*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =08)'); PDF_TextLine(Handle:'(*singletext='+ftext2+')' + '(*textx =150) + (*texty =70) + (*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =08)'); PDF_TextLine(Handle:'(*singletext='+ftext3+')' + '(*textx =150) + (*texty =75) + (*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =08)'); PDF_DrawBox(Handle:'(*strokewidth=1) + (*rectx =20) + (*recty =130) + (*StrokeColor= ) + (*rectwidth =170) + (*rectheight =20)'); PDF_TextLine(Handle:'(*singletext='+TxtKdnr+')' + '(*textx =25) + (*texty =120) + (*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+TxtRenr+')' + '(*textx =80) + (*texty =120) + (*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+TxtDate+')' + '(*textx =150) + (*texty =120) + (*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextFlow(Handle:'(*flowtext='+AText +')' + '(*flowlux =20) + (*flowluy =270) + (*flowrdx =190) + (*flowrdy =285) + (*flowwidth =0) + (*flowheight=0) + (*flowcrtopt='+crtopt +')'); PDF_TextLine(Handle:'(*singletext=Seite -) + *textx =100) + (*texty =290) + (*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =08)'); PDF_CloseDoc(Handle:' '); *Inlr=*on; /End-free |
Das mit diesem Programm erzeugte PDF-Dokument sieht so aus:
Das Musterprogramm INVOICE
Das folgende Programm verwendet das zuvor erstellte PDF-Dokument als Schablone und füllt die Rechnungsdaten ein. Kundendaten und Artikel sind zur besseren Lesbarkeit als Konstante bzw. in einer Datenstruktur dargestellt und nicht wie üblich einer Datenbank entnommen.
Hinweis: Wenn anstelle einer jpg-Datei eine PDF-Datei als Vorlage zur Erstellung einer neuen PDF-Datei dienen soll, ist die PDFLIB02-Lizenz erforderlich. Siehe Frage Nr 5. bei den Häufig gestellten Fragen.
PDFLIB01 PDF-Dokumente erzeugen
PDFLIB02 PDF-Dokumente erzeugen mit Nutzung bereits vorhandener PDF-Dokumente
Variante 1 - Alle Rechnungen in einem PDF-Dokument
Alle Rechnungen werden in einer Datei mit Namen ‚Invoice Tagesdatum' gespeichert. Wenn jede Rechnung in eine eigene Datei gespeichert werden soll, kann die Variante 2 als Muster verwendet werden.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
********************************************************************************************** * Program :Invoice * Descriptions :Sample invoice * Programmer :Gerd Schramm * Creation Date :01.07.2014 ********************************************************************************************** * H E A D E R - S P E C I F I C A T I O N S ********************************************************************************************** H/COPY Qcpylesrc,H_SPECSPDF ********************************************************************************************** * F I L E S P E C I F I C A T I O N S ********************************************************************************************** ********************************************************************************************** * P R O T O T Y P I N G / C O P Y M E M B E R ********************************************************************************************** D/COPY qprolesrc,pdfsrvpgm * ********************************************************************************************** * D E F I N I T I O N G L O B A L V A R I A B L E S ********************************************************************************************** d Handle s * d Adr1 s 30 inz('Musterkunde') varying d Adr2 s 30 inz('Musterstrasse') varying d Adr3 s 30 inz('XXXXX Ort') varying d Font s 256 inz('Helvetica-Bold') varying d Encoding s 256 inz('unicode') varying d FontOpt s 256 inz(' ') d CrtOpt s 256 inz('fontname=Helvetica + d fontsize=8 encoding=unicode + d fillcolor={gray 0} + d alignment=justify') d CrtOptr s 256 inz('fontname=Helvetica + d fontsize=8 encoding=unicode + d fillcolor={gray 0} + d alignment=right') d CurDat s d datfmt(*eur) d Today s 10 d Invnbr s 10i 0 d InvnbrA s 5 d line s 10i 0 d x s 10i 0 d linea s 5 d savekdnr s 5 d pricea s 12 d totala s 12 d total s 9 2 d Fontsize s 6s 0 inz(12) d Stext s 4096 inz('Überschrift' ) d Stext2 s 4096 inz('Farbbox' ) d Txtsum s 4096 inz('Rechnungsbetrag') d varying d TxtEUR s 4096 inz('EUR') d varying D DSItem DS Qualified D 10I 0 inz(1) D 5A Varying inz('12345') D 30A Varying inz('Software product 1') D 9 2 inz(2500,00) D 10I 0 inz(2) D 5A Varying inz('12345') D 30A Varying inz('Software product 2') D 9 2 inz(3000,00) D 10I 0 inz(3) D 5A Varying inz('12345') D 30A Varying inz('Software product 3') D 9 2 inz(4000,00) D 10I 0 inz(4) D 5A Varying inz('12346') D 30A Varying inz('Software product 1') D 9 2 inz(1500,00) D 10I 0 inz(5) D 5A Varying inz('12346') D 30A Varying inz('Software product 3') D 9 2 inz(6000,00) D Arr Dim(5) Overlay(DSItem) D Num 10I 0 Overlay(Arr) D Kdnr 5A Varying Overlay(Arr: *Next) D Item 30A Varying Overlay(Arr: *Next) D Price 9 2 Overlay(Arr: *Next) ********************************************************************************************** * M A I N P R O G R A M ********************************************************************************************** /Free CurDat=%date(); today=%char(curdat); Handle=PDF_CreateDoc('(*license=X'' '') + (*Searchpath=/Toolmaker/Fonts) + (*Docname =/home/gsc/Invoice '+Today+'.pdf)' + '(*Creator =RPG) + (*Author =Gerd Schramm) + (*pdidoc =forminv.pdf) + (*dimension =mm) + (*direction =topdown) + (*pagenbr =0) + (*pagex =110) + (*pagey =290) + (*Title =Test invoice)'); For x=1 to 5; if dsitem.kdnr(x)<>savekdnr; if savekdnr<>*blank; exsr Sum; PDF_NextPage(Handle:'(*pagenbr=0)'); endif; invnbr+=1; line =140; invnbra=%char(invnbr); savekdnr=dsitem.kdnr(x); PDF_TextLine(Handle:'(*singletext='+adr1+')' + '(*textx =25) + (*texty =70) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+adr2+')' + '(*textx =25) + (*texty =75) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+adr3+')' + '(*textx =25) + (*texty =85) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+dsitem.kdnr(x)+')' + '(*textx =60) + (*texty =120) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+invnbra+')' + '(*textx =120) + (*texty =120) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+today+')' + '(*textx =165) + (*texty =120) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); endif; line+=10; linea=%char(line); total+=dsitem.price(x); pricea=%editw(dsitem.price(x):' . . , '); PDF_TextLine(Handle:'(*singletext=1) + (*textx =25) + (*texty ='+linea+')' + '(*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+dsitem.item(x)+')' + '(*textx =35) + (*texty ='+linea+')' + '(*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+txteur+')' + '(*textx =130) + (*texty ='+linea+')' + '(*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+pricea+')' + '(*textx =140) + (*texty ='+linea+')' + '(*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); Endfor; exsr sum; PDF_CloseDoc(Handle:' '); *Inlr=*on; begsr sum; line+=10; linea=%char(line); totala=%editw(total:' . . , '); PDF_TextLine(Handle:'(*singletext=------------) + (*textx =140) + (*texty ='+linea+')' + '(*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); line+=10; linea=%char(line); PDF_TextLine(Handle:'(*singletext='+txtsum+')' + '(*textx =35) + (*texty ='+linea+')' + '(*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+txteur+')' + '(*textx =130) + (*texty ='+linea+')' + '(*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); PDF_TextLine(Handle:'(*singletext='+totala+')' + '(*textx =140) + (*texty ='+linea+')' + '(*textoption =fillcolor={gray 0.5}) + (*font =arial) + (*fontencoding=unicode) + (*fontsize =10)'); total =*zero; endsr; /End-free |
Variante 2 - Pro Rechnung ein PDF-Dokument
Programmname INVOICEN. Eine Datei mit Namen 'Invoice <rechnungsnr>' pro Rechnung.
Die Zeilen 87-112 von INVOICE aus Variante 1 ersetzt werden.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
CurDat=%date(); today=%char(curdat); For x=1 to 5; if dsitem.kdnr(x)<>savekdnr; if savekdnr<>*blank; exsr Sum; PDF_CloseDoc(Handle:' '); endif; invnbr+=1; line =140; invnbra=%char(invnbr); savekdnr=dsitem.kdnr(x); Handle=PDF_CreateDoc('(*license=X'' '') + (*Searchpath=/Toolmaker/Fonts) + (*Docname =/home/gsc/Invoice '+invnbra+'.pdf)' + '(*Creator =RPG) + (*Author =Gerd Schramm) + (*pdidoc =forminv.pdf) + (*dimension =mm) + (*direction =topdown) + (*pagenbr =0) + (*pagex =110) + (*pagey =290) + (*Title =Test invoice)'); |
Die komplette Musterrechnung
Das Musterprogramm FERDINV
Das Musterprogramm FERDINV erstellt ein leeres PDF mit integriertem ZUGFeDR XML-Teil.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
0001.00*************************************************************************** 0002.00 * Program : Ferdinv 0003.00 * Descriptions : Sample FeRD document 0004.00 * Programmer : Toolmaker 0005.00 * Creation Date : 30.09.2015 0006.00*************************************************************************** 0007.00 * H E A D E R - S P E C I F I C A T I O N S 0008.00*************************************************************************** 0009.00 H/COPY Qcpylesrc,H_SPECSPDF 0010.00*************************************************************************** 0011.00 * F I L E S P E C I F I C A T I O N S 0012.00*************************************************************************** 0013.00*************************************************************************** 0014.00 * P R O T O T Y P I N G / C O P Y M E M B E R 0015.00*************************************************************************** 0016.00 D/COPY qprolesrc,pdfsrvpgm 0017.00 * 0018.00*************************************************************************** 0019.00 * D E F I N I T I O N G L O B A L V A R I A B L E S 0020.00*************************************************************************** 0021.00 d Handle s * 0022.00 d renra s 10 inz('12345') 0023.00 d datea s 8 inz('20150929') 0024.00 d sellername s 50 inz('Mustermann GmbH') 0025.00 d sellerline1 s 50 inz('Musterstrasse 7') 0026.00 d sellercity s 50 inz('München') 0027.00 d sellerplz s 5 inz('80000') 0028.00 d sellercountry s 3 inz('DE') 0029.00 d buyername s 50 inz('Einkauf AG') 0030.00 d buyerline1 s 50 inz('Einkaufstrasse 9') 0031.00 d buyercity s 50 inz('Hamburg') 0032.00 d buyerplz s 5 inz('20000') 0033.00 d buyercountry s 3 inz('DE') 0034.00 d curr s 3 inz('EUR') 0035.00 d vatid s 20 inz('DE123456789') 0036.00 d vatpera s 4 inz('19.0') 0037.00 d vatamounta s 15 inz('6,94') 0038.00 d Termtext s 256 inz('Zahlbar netto innerhalb von - 0039.00 d 14 Tagen') 0040.00 d totala s 15 inz('36,50') 0041.00 d gtotala s 15 inz('43,44') 0042.00 d line1 s 15 inz('1') 0043.00 d itemname1 s 15 inz('Äpfel') 0044.00 d quant1 s 15 inz('30') 0045.00 d amount1 s 15 inz('16,50') 0046.00 d line2 s 15 inz('2') 0047.00 d itemname2 s 15 inz('Birnen') 0048.00 d quant2 s 15 inz('20') 0049.00 d amount2 s 15 inz('20,00') 0050.00 0051.00*************************************************************************** 0052.00 * M A I N P R O G R A M 0053.00*************************************************************************** 0054.00 /Free 0055.00 0056.00 Handle=PDF_CreateDoc('(*license='' '') + 0057.00 (*Searchpath=/Toolmaker/Fonts) + 0058.00 (*Docname =/tmp/ferdempty.pdf) + 0059.00 (*Creator =RPG) + 0060.00 (*Author =Gerd Schramm) + 0061.00 (*dimension =mm) + 0062.00 (*direction =topdown) + 0063.00 (*docoptions=pdfa=PDF/A-3b metadata={filename={+ 0064.00 ZUGFeRD_extension_schema.xmp}}) + 0065.00 (*Title =Test FeRD)'); 0066.00 PDF_FERDDOC('(*Docnbr ='+renra+') + 0067.00 (*Docname =/tmp/ferdempty.pdf) + 0068.00 (*Doctype =380) + 0069.00 (*Docjjjjmmdd ='+datea+') + 0070.00 (*Sellername ='+Sellername+') + 0071.00 (*Sellerline1 ='+sellerline1+') + 0072.00 (*SellerPostcode ='+sellerplz+') + 0073.00 (*Sellercity ='+sellercity+') + 0074.00 (*Sellercountry ='+sellercountry+') + 0075.00 (*Buyername ='+buyername+') + 0076.00 (*Buyerline1 ='+buyerline1+') + 0077.00 (*BuyerPostcode ='+buyerplz+') + 0078.00 (*Buyercity ='+buyercity+') + 0079.00 (*Buyercountry ='+buyercountry+') + 0080.00 (*Currency ='+curr+') + 0081.00 (*Vatid ='+vatid+') + 0082.00 (*Vatpercent ='+Vatpera+') + 0083.00 (*Vatamount ='+Vatamounta+') + 0084.00 (*Payterm ='+Termtext+') + 0085.00 (*Total ='+totala+') + 0086.00 (*Grandtotal ='+gtotala+')'); 0087.00 PDF_FERDITEM('(*Docnbr ='+renra+') + 0088.00 (*Docname =/tmp/ferdempty.pdf) + 0089.00 (*Doctype =380) + 0090.00 (*Docjjjjmmdd ='+datea+') + 0091.00 (*itemline ='+line1+') + 0092.00 (*itemname ='+itemname1+') + 0093.00 (*itemquantity ='+quant1+') + 0094.00 (*itemamount ='+amount1+')'); 0095.00 PDF_FERDITEM('(*Docnbr ='+renra+') + 0096.00 (*Docname =/tmp/ferdempty.pdf) + 0097.00 (*Doctype =380) + 0098.00 (*Docjjjjmmdd ='+datea+') + 0099.00 (*itemline ='+line2+') + 0100.00 (*itemname ='+itemname2+') + 0101.00 (*itemquantity ='+quant2+') + 0102.00 (*itemamount ='+amount2+')'); 0103.00 PDF_CloseDoc(Handle:' '); 0104.00 *Inlr=*on; 0105.00 0106.00 /End-free |
Das Musterprogramm FERDINVPR
Dieses Programm erzeugt das lesbare PDF mit XML-Datei.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
0001.00*************************************************************************** 0002.00 * Program : FeRDinvpr 0003.00 * Descriptions : Sample invoice FeRD with printable pdf 0004.00 * Programmer : Toolmaker 0005.00 * Creation Date : 17.11.2015 0006.00*************************************************************************** 0007.00 * H E A D E R - S P E C I F I C A T I O N S 0008.00*************************************************************************** 0009.00 H/COPY Qcpylesrc,H_SPECSPDF 0010.00*************************************************************************** 0011.00 * F I L E S P E C I F I C A T I O N S 0012.00*************************************************************************** 0013.00*************************************************************************** 0014.00 * P R O T O T Y P I N G / C O P Y M E M B E R 0015.00*************************************************************************** 0016.00 D/include qprolesrc,pdfsrvpgm 0017.00 0018.00 * 0019.00*************************************************************************** 0020.00 * D E F I N I T I O N G L O B A L V A R I A B L E S 0021.00*************************************************************************** 0022.00 d Handle s * 0023.00 d sellername s 50 inz('Toolmaker Advanced Efficiency - 0024.00 d GmbH') 0025.00 d sellerline1 s 50 inz('Westendstrasse 34') 0026.00 d sellercity s 50 inz('Kaufering') 0027.00 d sellerplz s 5 inz('86916') 0028.00 d sellercountry s 3 inz('DE') 0029.00 d buyername s 50 inz('Mustermann GmbH') 0030.00 d buyerline1 s 50 inz('Musterstrasse 34') 0031.00 d buyercity s 50 inz('München') 0032.00 d buyerplz s 5 inz('80000') 0033.00 d buyercountry s 3 inz('DE') 0034.00 d buyerkdnr s 5 inz('12345') 0035.00 d invnbra s 5 inz('54321') 0036.00 d curr s 3 inz('EUR') 0037.00 d vatid s 20 inz('DE123456789') 0038.00 d vattext s 30 inz('Mehrwertsteuer 19.0 %') 0039.00 d vatpera s 5 inz('19,00') 0040.00 d vatamounta s 15 0041.00 d vatpercent s 4 2 inz(19,00) 0042.00 d vatamount s 9 2 0043.00 d Termtext s 256 inz('Der Rechnungsbetrag ist inn- 0044.00 d erhalb von 14 Tagen netto zahlba- 0045.00 d r. Die Produkte bleiben bis zur - 0046.00 d vollständeigen Bezahlung unser E- 0047.00 d igentum. Es gelten unsere allgem- 0048.00 d einen Geschäftsbedingungen.') 0049.00 d total s 9 2 0050.00 d gtotal s 9 2 0051.00 d totala s 15 0052.00 d gtotala s 15 0053.00 d CurDat s d datfmt(*eur) 0054.00 d Today s 10 0055.00 d date8 s 8 0056.00 d Invnbr s 10i 0 0057.00 d line s 10i 0 0058.00 d x s 10i 0 0059.00 d xa s 3 0060.00 d linea s 5 0061.00 d pricea s 12 0062.00 d Fontsize s 6s 0 inz(12) 0063.00 d Stext s 4096 inz('Überschrift' ) 0064.00 d Stext2 s 4096 inz('Farbbox' ) 0065.00 d Txtsum s 4096 inz('Rechnungsbetrag netto') 0066.00 d gtotaltext s 4096 inz('Rechnungsbetrag brutto') 0067.00 d* 0068.00 D DSItem DS Qualified 0069.00 D 10I 0 inz(1) 0070.00 D 30A Varying inz('Software product 1') 0071.00 D 15A Varying inz('1') 0072.00 D 9 2 inz(1500,00) 0073.00 D 10I 0 inz(2) 0074.00 D 30A Varying inz('Software product 2') 0075.00 D 15A Varying inz('1') 0076.00 D 9 2 inz(3000,00) 0077.00 D 10I 0 inz(3) 0078.00 D 30A Varying inz('Software product 3') 0080.00 D 9 2 inz(4000,00) 0081.00 D 10I 0 inz(4) 0082.00 D 30A Varying inz('Software product 4') 0083.00 D 15A Varying inz('2') 0084.00 D 9 2 inz(3000,00) 0085.00 D 10I 0 inz(5) 0086.00 D 30A Varying inz('Software product 5') 0087.00 D 15A Varying inz('1') 0088.00 D 9 2 inz(4000,00) 0089.00 D 10I 0 inz(6) 0090.00 D 30A Varying inz('Software product 6') 0091.00 D 15A Varying inz('3') 0092.00 D 9 2 inz(6000,00) 0093.00 D 10I 0 inz(7) 0094.00 D 30A Varying inz('Software product 7') 0095.00 D 15A Varying inz('1') 0096.00 D 9 2 inz(1300,00) 0097.00 D 10I 0 inz(8) 0098.00 D 30A Varying inz('Software product 8') 0099.00 D 15A Varying inz('1') 0100.00 D 9 2 inz(2300,00) 0101.00 D 10I 0 inz(9) 0102.00 D 30A Varying inz('Software product 9') 0103.00 D 15A Varying inz('1') 0104.00 D 9 2 inz(1600,00) 0105.00 D 10I 0 inz(10) 0106.00 D 30A Varying inz('Software product 10') 0107.00 D 15A Varying inz('1') 0108.00 D 9 2 inz(1200,00) 0109.00 D 10I 0 inz(11) 0110.00 D 30A Varying inz('Software product 11') 0111.00 D 15A Varying inz('1') 0112.00 D 9 2 inz(6300,00) 0113.00 D 10I 0 inz(12) 0114.00 D 30A Varying inz('Software product 12') 0115.00 D 15A Varying inz('3') 0116.00 D 9 2 inz(3300,00) 0117.00 D 10I 0 inz(13) 0118.00 D 30A Varying inz('Software product 13') 0119.00 D 15A Varying inz('4') 0120.00 D 9 2 inz(4400,00) 0121.00 D Arr Dim(13) Overlay(DSItem) 0122.00 D Num 10I 0 Overlay(Arr) 0123.00 D Item 30A Varying Overlay(Arr: *Next) 0124.00 D quantity 15A Varying Overlay(Arr: *Next) 0125.00 D Price 9 2 Overlay(Arr: *Next) 0126.00 0127.00*************************************************************************** 0128.00 * M A I N P R O G R A M 0129.00*************************************************************************** 0130.00 /Free 0131.00 CurDat=%date(); 0132.00 today=%char(curdat); 0133.00 date8 = %char(curdat:*iso); 0134.00 0135.00 Handle=PDF_CreateDoc('(*license=I900205-010741-134441-UV7NH2-JPHL62'' '')+ 0136.00 (*Searchpath=/Toolmaker/Fonts) + 0137.00 (*Docname =/tmp/Ferdinv.pdf)' + 0138.00 '(*Creator =RPG) + 0139.00 (*Author =Gerd Schramm) + 0140.00 (*pdidoc =forminv.pdf) + 0141.00 (*dimension =mm) + 0142.00 (*direction =topdown) + 0143.00 (*docoptions=pdfa=PDF/A-3b metadata={filename={+ 0144.00 ZUGFeRD_extension_schema.xmp}}) + 0145.00 (*pagenbr =0) + 0146.00 (*pagex =110) + 0147.00 (*pagey =290) + 0148.00 (*Title =Test invoice)'); 0149.00 0150.00 invnbr+=1; 0151.00 exsr head; 0152.00 0153.00 For x=1 to 13; 0154.00 If line>250; 0155.00 PDF_NextPage(Handle:''); 0156.00 exsr head; 0157.00 Endif; 0158.00 line+=10; 0159.00 linea=%char(line); 0160.00 xa =%char(x); 0161.00 total+=dsitem.price(x); 0162.00 pricea=%editw(dsitem.price(x):' . . , '); 0163.00 0164.00 PDF_TextLine(Handle:'(*singletext='+xa+')' + 0165.00 ' (*textx =25) + 0166.00 (*texty ='+linea+')' + 0167.00 '(*font =LuciduxSans-Oblique) + 0168.00 (*fontencoding=unicode) + 0169.00 (*fontoption =embedding) + 0170.00 (*fontsize =10)'); 0171.00 PDF_TextLine(Handle:'(*singletext='+dsitem.item(x)+')' + 0172.00 '(*textx =35) + 0173.00 (*texty ='+linea+')' + 0174.00 '(*font =LuciduxSans-Oblique) + 0175.00 (*fontencoding=unicode) + 0176.00 (*fontoption =embedding) + 0177.00 (*fontsize =10)'); 0178.00 PDF_TextLine(Handle:'(*singletext='+dsitem.quantity(x)+')' + 0179.00 '(*textx =110) + 0180.00 (*texty ='+linea+')' + 0181.00 '(*font =LuciduxSans-Oblique) + 0182.00 (*fontencoding=unicode) + 0183.00 (*fontoption =embedding) + 0184.00 (*fontsize =10)'); 0185.00 PDF_TextLine(Handle:'(*singletext='+curr+')' + 0186.00 '(*textx =130) + 0187.00 (*texty ='+linea+')' + 0188.00 '(*font =LuciduxSans-Oblique) + 0189.00 (*fontencoding=unicode) + 0190.00 (*fontoption =embedding) + 0191.00 (*fontsize =10)'); 0192.00 PDF_TextLine(Handle:'(*singletext='+pricea+')' + 0193.00 '(*textx =140) + 0194.00 (*texty ='+linea+')' + 0195.00 '(*font =LuciduxSans-Oblique) + 0196.00 (*fontencoding=unicode) + 0197.00 (*fontoption =embedding) + 0198.00 (*fontsize =10)'); 0199.00 Endfor; 0200.00 exsr sum; 0201.00 PDF_CloseDoc(Handle:' '); 0202.00 *Inlr=*on; 0203.00//************************************************************************* 0204.00 begsr sum; 0205.00 If line>250; 0206.00 PDF_NextPage(Handle:''); 0207.00 exsr head; 0208.00 Endif; 0209.00 line+=10; 0210.00 linea=%char(line); 0211.00 vatamount=total*vatpercent/100; 0212.00 vatamounta=%editw(vatamount:' . . , '); 0213.00 gtotal=vatamount+total; 0214.00 totala=%editw(total:' . . , '); 0215.00 gtotala=%editw(gtotal:' . . , '); 0216.00 0217.00 PDF_TextLine(Handle:'(*singletext=------------) + 0218.00 (*textx =140) + 0219.00 (*texty ='+linea+')' + 0220.00 '(*textoption =fillcolor={gray 0.5}) + 0221.00 (*font =LuciduxSans-Oblique) + 0222.00 (*fontencoding=unicode) + 0223.00 (*fontoption =embedding) + 0224.00 (*fontsize =10)'); 0225.00 line+=10; 0226.00 linea=%char(line); 0227.00 PDF_TextLine(Handle:'(*singletext='+txtsum+')' + 0228.00 '(*textx =35) + 0229.00 (*texty ='+linea+')' + 0230.00 '(*textoption =fillcolor={gray 0.5}) + 0231.00 (*font =LuciduxSans-Oblique) + 0232.00 (*fontencoding=unicode) + 0233.00 (*fontoption =embedding) + 0234.00 (*fontsize =10)'); 0235.00 PDF_TextLine(Handle:'(*singletext='+curr+')' + 0236.00 '(*textx =130) + 0237.00 (*texty ='+linea+')' + 0238.00 '(*font =LuciduxSans-Oblique) + 0239.00 (*fontencoding=unicode) + 0221.00 (*font =LuciduxSans-Oblique) + 0222.00 (*fontencoding=unicode) + 0223.00 (*fontoption =embedding) + 0224.00 (*fontsize =10)'); 0225.00 line+=10; 0226.00 linea=%char(line); 0227.00 PDF_TextLine(Handle:'(*singletext='+txtsum+')' + 0228.00 '(*textx =35) + 0229.00 (*texty ='+linea+')' + 0230.00 '(*textoption =fillcolor={gray 0.5}) + 0231.00 (*font =LuciduxSans-Oblique) + 0232.00 (*fontencoding=unicode) + 0233.00 (*fontoption =embedding) + 0234.00 (*fontsize =10)'); 0235.00 PDF_TextLine(Handle:'(*singletext='+curr+')' + 0236.00 '(*textx =130) + 0237.00 (*texty ='+linea+')' + 0238.00 '(*font =LuciduxSans-Oblique) + 0239.00 (*fontencoding=unicode) + 0240.00 (*fontoption =embedding) + 0222.00 (*fontencoding=unicode) + 0223.00 (*fontoption =embedding) + 0224.00 (*fontsize =10)'); 0225.00 line+=10; 0226.00 linea=%char(line); 0227.00 PDF_TextLine(Handle:'(*singletext='+txtsum+')' + 0228.00 '(*textx =35) + 0229.00 (*texty ='+linea+')' + 0230.00 '(*textoption =fillcolor={gray 0.5}) + 0231.00 (*font =LuciduxSans-Oblique) + 0232.00 (*fontencoding=unicode) + 0233.00 (*fontoption =embedding) + 0234.00 (*fontsize =10)'); 0235.00 PDF_TextLine(Handle:'(*singletext='+curr+')' + 0236.00 '(*textx =130) + 0237.00 (*texty ='+linea+')' + 0238.00 '(*font =LuciduxSans-Oblique) + 0239.00 (*fontencoding=unicode) + 0240.00 (*fontoption =embedding) + 0241.00 (*fontsize =10)'); 0242.00 PDF_TextLine(Handle:'(*singletext='+totala+')' + 0243.00 '(*textx =140) + 0244.00 (*texty ='+linea+')' + 0245.00 '(*font =LuciduxSans-Oblique) + 0246.00 (*fontencoding=unicode) + 0247.00 (*fontoption =embedding) + 0248.00 (*fontsize =10)'); 0249.00 line+=10; 0250.00 linea=%char(line); 0251.00 PDF_TextLine(Handle:'(*singletext=------------) + 0252.00 (*textx =140) + 0253.00 (*texty ='+linea+')' + 0254.00 '(*textoption =fillcolor={gray 0.5}) + 0255.00 (*font =LuciduxSans-Oblique) + 0256.00 (*fontencoding=unicode) + 0257.00 (*fontoption =embedding) + 0258.00 (*fontsize =10)'); 0259.00 line+=10; 0260.00 linea=%char(line); 0261.00 PDF_TextLine(Handle:'(*singletext='+vattext+')' + 0243.00 '(*textx =140) + 0244.00 (*texty ='+linea+')' + 0245.00 '(*font =LuciduxSans-Oblique) + 0246.00 (*fontencoding=unicode) + 0247.00 (*fontoption =embedding) + 0248.00 (*fontsize =10)'); 0249.00 line+=10; 0250.00 linea=%char(line); 0251.00 PDF_TextLine(Handle:'(*singletext=------------) + 0252.00 (*textx =140) + 0253.00 (*texty ='+linea+')' + 0254.00 '(*textoption =fillcolor={gray 0.5}) + 0255.00 (*font =LuciduxSans-Oblique) + 0256.00 (*fontencoding=unicode) + 0257.00 (*fontoption =embedding) + 0258.00 (*fontsize =10)'); 0259.00 line+=10; 0260.00 linea=%char(line); 0261.00 PDF_TextLine(Handle:'(*singletext='+vattext+')' + 0262.00 '(*textx =35) + 0263.00 (*texty ='+linea+')' + 0264.00 '(*textoption =fillcolor={gray 0.5}) + 0265.00 (*font =LuciduxSans-Oblique) + 0266.00 (*fontencoding=unicode) + 0267.00 (*fontoption =embedding) + 0268.00 (*fontsize =10)'); 0269.00 PDF_TextLine(Handle:'(*singletext='+curr+')' + 0270.00 '(*textx =130) + 0271.00 (*texty ='+linea+')' + 0272.00 '(*font =LuciduxSans-Oblique) + 0273.00 (*fontencoding=unicode) + 0274.00 (*fontoption =embedding) + 0275.00 (*fontsize =10)'); 0276.00 PDF_TextLine(Handle:'(*singletext='+vatamounta+')' + 0277.00 '(*textx =140) + 0278.00 (*texty ='+linea+')' + 0279.00 '(*font =LuciduxSans-Oblique) + 0280.00 (*fontencoding=unicode) + 0281.00 (*fontoption =embedding) + 0282.00 (*fontsize =10)'); 0283.00 line+=10; 0284.00 linea=%char(line); 0285.00 PDF_TextLine(Handle:'(*singletext=------------) + 0286.00 (*textx =140) + 0287.00 (*texty ='+linea+')' + 0288.00 '(*textoption =fillcolor={gray 0.5}) + 0289.00 (*font =LuciduxSans-Oblique) + 0290.00 (*fontencoding=unicode) + 0291.00 (*fontoption =embedding) + 0292.00 (*fontsize =10)'); 0293.00 line+=10; 0294.00 linea=%char(line); 0295.00 PDF_TextLine(Handle:'(*singletext='+gtotaltext+')' + 0296.00 '(*textx =35) + 0297.00 (*texty ='+linea+')' + 0298.00 '(*textoption =fillcolor={gray 0.5}) + 0299.00 (*font =LuciduxSans-Oblique) + 0300.00 (*fontencoding=unicode) + 0301.00 (*fontoption =embedding) + 0302.00 (*fontsize =10)'); 0303.00 PDF_TextLine(Handle:'(*singletext='+curr+')' + 0304.00 '(*textx =130) + 0305.00 (*texty ='+linea+')' + 0306.00 '(*font =LuciduxSans-Oblique) + 0307.00 (*fontencoding=unicode) + 0308.00 (*fontoption =embedding) + 0309.00 (*fontsize =10)'); 0310.00 PDF_TextLine(Handle:'(*singletext='+gtotala+')' + 0311.00 '(*textx =140) + 0312.00 (*texty ='+linea+')' + 0313.00 '(*font =LuciduxSans-Oblique) + 0314.00 (*fontencoding=unicode) + 0315.00 (*fontoption =embedding) + 0316.00 (*fontsize =10)'); 0317.00 PDF_FERDDOC('(*Docnbr ='+invnbra+') + 0318.00 (*Docname =/tmp/ferdinv.pdf) + 0319.00 (*Doctype =380) + 0320.00 (*Docjjjjmmdd ='+date8+') + 0321.00 (*Sellername ='+Sellername+') + 0322.00 (*Sellerline1 ='+sellerline1+') + 0323.00 (*SellerPostcode ='+sellerplz+') + 0324.00 (*Sellercity ='+sellercity+') + 0325.00 (*Sellercountry ='+sellercountry+') + 0326.00 (*Buyername ='+buyername+') + 0327.00 (*Buyerline1 ='+buyerline1+') + 0328.00 (*BuyerPostcode ='+buyerplz+') + 0329.00 (*Buyercity ='+buyercity+') + 0330.00 (*Buyercountry ='+buyercountry+') + 0331.00 (*Currency ='+curr+') + 0332.00 (*Vatid ='+vatid+') + 0333.00 (*Vatpercent ='+Vatpera+') + 0334.00 (*Vatamount ='+Vatamounta+') + 0335.00 (*Payterm ='+Termtext+') + 0336.00 (*Total ='+totala+') + 0337.00 (*Grandtotal ='+gtotala+')'); 0338.00 For x=1 to 13; 0339.00 xa=%char(x); 0340.00 pricea=%editw(dsitem.price(x):' . . , '); 0341.00 PDF_FERDITEM('(*Docnbr ='+invnbra+') + 0342.00 (*Docname =/tmp/ferdinv.pdf) + 0343.00 (*Doctype =380) + 0344.00 (*Docjjjjmmdd ='+date8+') + 0345.00 (*itemline ='+xa+') + 0346.00 (*itemname ='+dsitem.item(x)+') + 0347.00 (*itemquantity ='+dsitem.quantity(x)+') + 0348.00 (*itemamount ='+pricea+')'); 0349.00 EndFor; 0350.00 endsr; 0351.00//************************************************************************* 0352.00 begsr head; 0353.00 PDF_TextLine(Handle:'(*singletext='+buyername+')' + 0354.00 '(*textx =25) + 0355.00 (*texty =70) + 0356.00 (*font =LuciduxSans-Oblique) + 0357.00 (*fontencoding=unicode) + 0358.00 (*fontoption =embedding) + 0359.00 (*fontsize =10)'); 0360.00 PDF_TextLine(Handle:'(*singletext='+buyerline1+')' + 0361.00 '(*textx =25) + 0362.00 (*texty =75) + 0363.00 (*font =LuciduxSans-Oblique) + 0364.00 (*fontencoding=unicode) + 0365.00 (*fontsize =10)'); 0366.00 PDF_TextLine(Handle:'(*singletext='+buyerplz+')' + 0367.00 '(*textx =25) + 0368.00 (*texty =85) + 0369.00 (*font =LuciduxSans-Oblique) + 0370.00 (*fontencoding=unicode) + 0371.00 (*fontoption =embedding) + 0372.00 (*fontsize =10)'); 0373.00 PDF_TextLine(Handle:'(*singletext='+buyercity+')' + 0374.00 '(*textx =50) + 0375.00 (*texty =85) + 0376.00 (*font =LuciduxSans-Oblique) + 0377.00 (*fontencoding=unicode) + 0378.00 (*fontoption =embedding) + 0379.00 (*fontsize =10)'); 0380.00 PDF_TextLine(Handle:'(*singletext='+buyerkdnr+')' + 0381.00 '(*textx =60) + 0382.00 (*texty =120) + 0364.00 (*fontencoding=unicode) + 0365.00 (*fontsize =10)'); 0366.00 PDF_TextLine(Handle:'(*singletext='+buyerplz+')' + 0367.00 '(*textx =25) + 0368.00 (*texty =85) + 0369.00 (*font =LuciduxSans-Oblique) + 0370.00 (*fontencoding=unicode) + 0371.00 (*fontoption =embedding) + 0372.00 (*fontsize =10)'); 0373.00 PDF_TextLine(Handle:'(*singletext='+buyercity+')' + 0374.00 '(*textx =50) + 0375.00 (*texty =85) + 0376.00 (*font =LuciduxSans-Oblique) + 0377.00 (*fontencoding=unicode) + 0378.00 (*fontoption =embedding) + 0379.00 (*fontsize =10)'); 0380.00 PDF_TextLine(Handle:'(*singletext='+buyerkdnr+')' + 0381.00 '(*textx =60) + 0382.00 (*texty =120) + 0383.00 (*font =LuciduxSans-Oblique) + 0384.00 (*fontencoding=unicode) + 0385.00 (*fontoption =embedding) + 0386.00 (*fontsize =10)'); 0387.00 PDF_TextLine(Handle:'(*singletext='+invnbra+')' + 0388.00 '(*textx =120) + 0389.00 (*texty =120) + 0390.00 (*font =LuciduxSans-Oblique) + 0391.00 (*fontencoding=unicode) + 0392.00 (*fontoption =embedding) + 0393.00 (*fontsize =10)'); 0394.00 PDF_TextLine(Handle:'(*singletext='+today+')' + 0395.00 '(*textx =165) + 0396.00 (*texty =120) + 0397.00 (*font =LuciduxSans-Oblique) + 0398.00 (*fontencoding=unicode) + 0399.00 (*fontoption =embedding) + 0400.00 (*fontsize =10)'); 0401.00 0402.00 line =140; 0403.00 linea=%char(line); 0404.00 PDF_TextLine(Handle:'(*singletext=Nr)' + 0405.00 ' (*textx =25) + 0406.00 (*texty ='+linea+')' + 0407.00 '(*textoption =fillcolor={gray 0.5}) + 0408.00 (*font =LuciduxSans-Oblique) + 0409.00 (*fontencoding=unicode) + 0410.00 (*fontoption =embedding) + 0411.00 (*fontsize =10)'); 0412.00 PDF_TextLine(Handle:'(*singletext=Artikel)' + 0413.00 '(*textx =35) + 0414.00 (*texty ='+linea+')' + 0415.00 '(*textoption =fillcolor={gray 0.5}) + 0416.00 (*font =LuciduxSans-Oblique) + 0417.00 (*fontencoding=unicode) + 0418.00 (*fontoption =embedding) + 0419.00 (*fontsize =10)'); 0420.00 PDF_TextLine(Handle:'(*singletext=Menge)' + 0421.00 '(*textx =105) + 0422.00 (*texty ='+linea+')' + 0423.00 '(*textoption =fillcolor={gray 0.5}) + 0424.00 (*font =LuciduxSans-Oblique) + 0425.00 (*fontencoding=unicode) + 0426.00 (*fontoption =embedding) + 0427.00 (*fontsize =10)'); 0428.00 PDF_TextLine(Handle:'(*singletext=Währung)' + 0429.00 '(*textx =125) + 0430.00 (*texty ='+linea+')' + 0431.00 '(*textoption =fillcolor={gray 0.5}) + 0432.00 (*font =LuciduxSans-Oblique) + 0433.00 (*fontencoding=unicode) + 0434.00 (*fontoption =embedding) + 0435.00 (*fontsize =10)'); 0436.00 PDF_TextLine(Handle:'(*singletext=Preis)' + 0437.00 '(*textx =145) + 0438.00 (*texty ='+linea+')' + 0439.00 '(*textoption =fillcolor={gray 0.5}) + 0440.00 (*font =LuciduxSans-Oblique) + 0441.00 (*fontencoding=unicode) + 0442.00 (*fontoption =embedding) + 0443.00 (*fontsize =10)'); 0444.00 endsr; 0445.00 //*************************************************************************** 0446.00 /End-free |
Das Musterprogramm FERDRetrieve
Das Programm extrahiert die XML-Datei aus dem PDF/A-3b Ferdinv.pdf.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
0001.00*************************************************************************** 0002.00 * Program : Ferdretr 0003.00 * Descriptions : Retrieve xml from pdf 0004.00 * Programmer : Toolmaker 0005.00 * Creation Date : 17.11.2015 0006.00*************************************************************************** 0007.00 * H E A D E R - S P E C I F I C A T I O N S 0008.00*************************************************************************** 0009.00 H/COPY Qcpylesrc,H_SPECSPDF 0010.00*************************************************************************** 0011.00 * F I L E S P E C I F I C A T I O N S 0012.00*************************************************************************** 0013.00*************************************************************************** 0014.00 * P R O T O T Y P I N G / C O P Y M E M B E R 0015.00*************************************************************************** 0016.00 D/include qprolesrc,pdfsrvpgm 0017.00 * 0018.00*************************************************************************** 0019.00 * D E F I N I T I O N G L O B A L V A R I A B L E S 0020.00*************************************************************************** 0021.00 0022.00*************************************************************************** 0023.00 * M A I N P R O G R A M 0024.00*************************************************************************** 0025.00 /Free 0026.00 0027.00 PDF_FERDRETRIEVE('(*Docname =/tmp/Ferdinv.pdf) + 0028.00 (*xmlfile =/tmp/zugferd.xml)'); 0029.00 *Inlr=*on; 0030.00 0031.00 /End-free |
...