Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Embed PDF into XML for invoice, UBL 2.1
Message
 
To
06/10/2021 06:27:34
General information
Forum:
Visual FoxPro
Category:
XML, XSD
Miscellaneous
Thread ID:
01682446
Message ID:
01682447
Views:
69
>I need to create invoice as XML file in UBL 2.1 format. Mandatory field is attached PDF invoice. Can you help me how to embed PDF invoice in XML (VFP 6)?
>Thanks in advance.

Hi,
lcData=FILETOSTR("output.pdf") && you need VFP 6.0 SP3
lcDataBase64=ToBase64(lcData)

PROCEDURE ToBase64()
LPARAM lcSource
LOCAL lii,liPom,lcCode,liChar
LOCAL ARRAY laBase64(64)

lcCode=""

* A - 65 bc64(0) 
* a - 97 bc64(26)
* 0 - 48 bc64(52)
* + - 43 bc64(62)
* / - 47 bc64(63)
* = - 61 bc64(65)

FOR lii=0 TO 25
    laBase64(lii+1)=CHR(lii+65)
NEXT
FOR lii=26 TO 51
    laBase64(lii+1)=CHR(lii+71)
NEXT
FOR lii=52 TO 61
    laBase64(lii+1)=CHR(lii-4)
NEXT
laBase64(62)="+"
laBase64(63)="/"

FOR lii=1 TO LEN(lcSource) STEP 3
    
    * nyní vezmi z prvního byte 6 bitu zleva
    liChar=ASC(SUBST(lcSource,lii,1))

    * prvních 6. bitů
    lcCode=lcCode+laBase64(BITRSHIFT(liChar, 2)+1)
    
    * druhá šestice bitů
    liPom=BITAND(liChar, 3)*16 && nechá 2 nižší bity tak jak byly a posnuje o 4 bity

    liChar=ASC(SUBST(lcSource,lii+1,1)) && načti další znak
    * a zněj potřebuju 4 vyšší bity
    * (posunu je do prava a přičtu to k nižžším bitům předchozího výsledku)
    lcCode=lcCode+laBase64(liPom+BITRSHIFT(liChar, 4)+1)

    IF LEN(SUBST(lcSource,lii+1,2))=0 && není-li druhý a třetí znak
       lcCode=lcCode+"=="
       LOOP
    ENDIF

    * třetí šestice bitů
    * zdruhého byte potřebuju nižší 4 bity
    liPom=BITAND(liChar, 15)*4 && nechá 4 nižší bity tak jak byly a posunu je do leva o dva bity

    liChar=ASC(SUBST(lcSource,lii+2,1)) && načti další znak

    * a zněj potřebuju 2 vyšší bity
    * (posunu je do prava a přičtu to k nižžším bitům předchozího výsledku)
    lcCode=lcCode+laBase64(liPom+BITRSHIFT(liChar, 6)+1)

    IF LEN(SUBST(lcSource,lii+2,1))=0 && není-li třetí znak
       lcCode=lcCode+"="
       LOOP
    ENDIF

    * čtvrtá šestice bitů
    * zdruhého byte potřebuju nižší 4 bity
    * nechá 6 nižších bitů tak jak byly

    lcCode=lcCode+laBase64(BITAND(liChar, 63)+1)

NEXT
RETURN lcCode
MartinaJ
"Navision is evil that needs to be erazed... to the ground"

Jabber: gorila@dione.zcu.cz
Jabber? Jabbim
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform