Inhaltsübersicht
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:
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 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.
0001.00***************************************************************************
0002.00 * Program : Invoice
0003.00 * Descriptions : Sample invoice (file name is Invoice+CurrentDate)
0004.00 * Programmer : Toolmaker
0005.00 * Creation Date : 2014-07-01
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_SPECS
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 *
0020.00***************************************************************************
0021.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
0022.00***************************************************************************
0023.00 d Handle s *
0024.00 d Adr1 s 30 inz('Musterkunde') varying
0025.00 d Adr2 s 30 inz('Musterstrasse') varying
0026.00 d Adr3 s 30 inz('XXXXX Ort') varying
0027.00 d Font s 256 inz('Helvetica-Bold') varying
0028.00 d Encoding s 256 inz('unicode') varying
0029.00 d FontOpt s 256 inz(' ')
0030.00 d CrtOpt s 256 inz('fontname=Helvetica +
0031.00 d fontsize=8 encoding=unicode +
0032.00 d fillcolor={gray 0} +
0033.00 d alignment=justify')
0034.00 d CrtOptr s 256 inz('fontname=Helvetica +
0035.00 d fontsize=8 encoding=unicode +
0036.00 d fillcolor={gray 0} +
0037.00 d alignment=right')
0038.00 d CurDat s d datfmt(*eur)
0039.00 d Today s 10
0040.00 d Invnbr s 10i 0
0041.00 d InvnbrA s 5
0042.00 d line s 10i 0
0043.00 d x s 10i 0
0044.00 d linea s 5
0045.00 d savekdnr s 5
0046.00 d pricea s 12
0047.00 d totala s 12
0048.00 d total s 9 2
0049.00 d Fontsize s 6s 0 inz(12)
0050.00 d Stext s 4096 inz('Überschrift' )
0051.00 d Stext2 s 4096 inz('Farbbox' )
0052.00 d Txtsum s 4096 inz('Rechnungsbetrag')
0053.00 d varying
0054.00 d TxtEUR s 4096 inz('EUR')
0055.00 d varying
0056.00 D DSItem DS Qualified
0057.00 D 10I 0 inz(1)
0058.00 D 5A Varying inz('12345')
0059.00 D 30A Varying inz('Software product 1')
0060.00 D 9 2 inz(2500,00)
0061.00 D 10I 0 inz(2)
0062.00 D 5A Varying inz('12345')
0063.00 D 30A Varying inz('Software product 2')
0064.00 D 9 2 inz(3000,00)
0065.00 D 10I 0 inz(3)
0066.00 D 5A Varying inz('12345')
0067.00 D 30A Varying inz('Software product 3')
0068.00 D 9 2 inz(4000,00)
0069.00 D 10I 0 inz(4)
0070.00 D 5A Varying inz('12346')
0071.00 D 30A Varying inz('Software product 1')
0072.00 D 9 2 inz(1500,00)
0073.00 D 10I 0 inz(5)
0074.00 D 5A Varying inz('12346')
0075.00 D 30A Varying inz('Software product 3')
0076.00 D 9 2 inz(6000,00)
0077.00 D Arr Dim(5) Overlay(DSItem)
0078.00 D Num 10I 0 Overlay(Arr)
0079.00 D Kdnr 5A Varying Overlay(Arr: *Next)
0080.00 D Item 30A Varying Overlay(Arr: *Next)
0081.00 D Price 9 2 Overlay(Arr: *Next)
0082.00
0083.00**************************************************************************************
0084.00 * M A I N P R O G R A M
0085.00**************************************************************************************
0086.00 /Free
0087.00 CurDat=%date();
0088.00 today=%char(curdat);
0089.00
0090.00 Handle=PDF_CreateDoc('(*license='' '') +
0091.00 (*Searchpath=/Toolmaker/Fonts) +
0092.00 (*Docname =/home/Invoice'Today'.pdf)' +
0093.00 '(*Creator =RPG) +
0094.00 (*Author =Toolmaker) +
0095.00 (*pdidoc =forminv.pdf) +
0096.00 (*dimension =mm) +
0097.00 (*direction =topdown) +
0098.00 (*pagenbr =0) +
0099.00 (*pagex =110) +
0100.00 (*pagey =290) +
0101.00 (*Title =Test invoice)');
0102.00 For x=1 to 5;
0103.00 if dsitem.kdnr<>savekdnr;
0104.00 if savekdnr<>*blank;
0105.00 exsr Sum;
0106.00 PDF_NextPage(Handle:'(*pagenbr=0)');
0107.00 endif;
0108.00 invnbr+=1;
0109.00 line =140;
0110.00 invnbra=%char(invnbr);
0111.00 savekdnr=dsitem.kdnr;
0112.00
0113.00 PDF_Textline(Handle:'(*singletext='adr1')' +
0114.00 '(*textx =25) +
0115.00 (*texty =70) +
0116.00 (*font =arial) +
0117.00 (*fontencoding=unicode) +
0118.00 (*fontsize =10)');
0119.00 PDF_Textline(Handle:'(*singletext='adr2')' +
0120.00 '(*textx =25) +
0121.00 (*texty =75) +
0122.00 (*font =arial) +
0123.00 (*fontencoding=unicode) +
0124.00 (*fontsize =10)');
0125.00 PDF_Textline(Handle:'(*singletext='adr3')' +
0126.00 '(*textx =25) +
0127.00 (*texty =85) +
0128.00 (*font =arial) +
0129.00 (*fontencoding=unicode) +
0130.00 (*fontsize =10)');
0131.00 PDF_Textline(Handle:'(*singletext='dsitem.kdnr')' +
0132.00 '(*textx =60) +
0133.00 (*texty =120) +
0134.00 (*font =arial) +
0135.00 (*fontencoding=unicode) +
0136.00 (*fontsize =10)');
0137.00 PDF_Textline(Handle:'(*singletext='invnbra')' +
0138.00 '(*textx =120) +
0139.00 (*texty =120) +
0140.00 (*font =arial) +
0141.00 (*fontencoding=unicode) +
0142.00 (*fontsize =10)');
0143.00 PDF_Textline(Handle:'(*singletext='today')' +
0144.00 '(*textx =165) +
0145.00 (*texty =120) +
0146.00 (*font =arial) +
0147.00 (*fontencoding=unicode) +
0148.00 (*fontsize =10)');
0149.00 endif;
0150.00
0151.00 line+=10;
0152.00 linea=%char(line);
0153.00 total+=dsitem.price;
0154.00 pricea=%editw(dsitem.price:' . . , ');
0155.00
0156.00 PDF_Textline(Handle:'(*singletext=1) +
0157.00 (*textx =25) +
0158.00 (*texty ='linea')' +
0159.00 '(*font =arial) +
0160.00 (*fontencoding=unicode) +
0161.00 (*fontsize =10)');
0162.00 PDF_Textline(Handle:'(*singletext='dsitem.item')' +
0163.00 '(*textx =35) +
0164.00 (*texty ='linea')' +
0165.00 '(*textoption =fillcolor={gray 0.5}) +
0166.00 (*font =arial) +
0167.00 (*fontencoding=unicode) +
0168.00 (*fontsize =10)');
0169.00 PDF_Textline(Handle:'(*singletext='txteur')' +
0170.00 '(*textx =130) +
0171.00 (*texty ='linea')' +
0172.00 '(*textoption =fillcolor={gray 0.5}) +
0173.00 (*font =arial) +
0174.00 (*fontencoding=unicode) +
0175.00 (*fontsize =10)');
0176.00 PDF_Textline(Handle:'(*singletext='pricea')' +
0177.00 '(*textx =140) +
0178.00 (*texty ='linea')' +
0179.00 '(*textoption =fillcolor={gray 0.5}) +
0180.00 (*font =arial) +
0181.00 (*fontencoding=unicode) +
0182.00 (*fontsize =10)');
0183.00 Endfor;
0184.00 exsr sum;
0185.00 PDF_CloseDoc(Handle: ' ');
0186.00 *Inlr=*on;
0187.00
0188.00 begsr sum;
0189.00 line+=10;
0190.00 linea=%char(line);
0191.00 totala=%editw(total:' . . , ');
0192.00
0193.00 PDF_Textline(Handle:'(*singletext=------------) +
0194.00 (*textx =140) +
0195.00 (*texty ='linea')' +
0196.00 '(*textoption =fillcolor={gray 0.5}) +
0197.00 (*font =arial) +
0198.00 (*fontencoding=unicode) +
0199.00 (*fontsize =10)');
0200.00 line+=10;
0201.00 linea=%char(line);
0202.00 PDF_Textline(Handle:'(*singletext='txtsum')' +
0203.00 '(*textx =35) +
0204.00 (*texty ='linea')' +
0205.00 '(*textoption =fillcolor={gray 0.5}) +
0206.00 (*font =arial) +
0207.00 (*fontencoding=unicode) +
0208.00 (*fontsize =10)');
0209.00 PDF_Textline(Handle:'(*singletext='txteur')' +
0210.00 '(*textx =130) +
0211.00 (*texty ='linea')' +
0212.00 '(*textoption =fillcolor={gray 0.5}) +
0213.00 (*font =arial) +
0214.00 (*fontencoding=unicode) +
0215.00 (*fontsize =10)');
0216.00 PDF_Textline(Handle:'(*singletext='totala')' +
0217.00 '(*textx =140) +
0218.00 (*texty ='linea')' +
0219.00 '(*textoption =fillcolor={gray 0.5}) +
0220.00 (*font =arial) +
0221.00 (*fontencoding=unicode) +
0222.00 (*fontsize =10)');
0223.00 total =*zero;
0224.00 endsr;
0225.00 /End-free
0226.00**************************************************************************************
Das Musterprogrammprogramm INVOICEN als Variante 2 von INVOICE
Programmname INVOICEN. Eine Datei mit Namen ‚Invoice Rechnungsnummer' pro Rechnung. Die Zeilen 87-112 müssen in Variante 1 ersetzt werden.
0087.00 CurDat=%date();
0088.00 today=%char(curdat);
0089.00
0090.00 For x=1 to 5;
0091.00 if dsitem.kdnr<>savekdnr;
0092.00 if savekdnr<>*blank;
0093.00 exsr Sum;
0094.00 PDF_CloseDoc(Handle:' ');
0095.00 endif;
0096.00 invnbr+=1;
0097.00 line =140;
0098.00 invnbra=%char(invnbr);
0099.00 savekdnr=dsitem.kdnr;
0100.00
0101.00 Handle=PDF_CreateDoc('(*license=xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx) +
0102.00 (*Searchpath=/Toolmaker/Fonts) +
0103.00 (*Docname =/home/gsc/Invoice 'invnbra'.pdf)'+
0104.00 '(*Creator =RPG) +
0105.00 (*Author =Gerd Schramm) +
0106.00 (*pdidoc =forminv.pdf) +
0107.00 (*dimension =mm) +
0108.00 (*direction =topdown) +
0109.00 (*pagenbr =0) +
0110.00 (*pagex =110) +
0111.00 (*pagey =290) +
0112.00 (*Title =Test invoice)');
Die komplette Musterrechnung:
Das Musterprogramm FERDINV
Das Musterprogramm FERDINV erstellt ein leeres PDF mit integriertem ZUGFeDR XML-Teil.
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.
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;
0161.00 total+=dsitem.price;
0162.00 pricea=%editw(dsitem.price:' . . , ');
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')' +
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')' +
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;
0340.00 pricea=%editw(dsitem.price:' . . , ');
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') +
0347.00 (*itemquantity ='dsitem.quantity') +
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.
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