Sample code for 30+ languages & platforms
PureBasic

Extract PDF from General Ledger Transactions XML

See more Office365 Examples

Demonstrates how to extract the base64 data representing a PDF file from a General Ledger Transactions XML.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkXml.pb"

Procedure ChilkatExample()

    success.i = 0

    ; The General Ledger Transactions XML contains the following:

    ; <?xml version="1.0" encoding="utf-8" ?>
    ; <eExact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="eExact-XML.xsd">
    ;     <GLTransactions>
    ;         <GLTransaction entry="100000095">
    ;             <TransactionType number="20" />
    ;             <Journal type="20" code="VK">
    ;                 <Description termid="90003">Verkopen</Description>
    ;                 <GLAccount type="20" code="400000" />
    ;                 <Currency code="EUR" />
    ;             </Journal>
    ;             <Date>2022-04-05</Date>
    ;             <Document>
    ;                 <Subject>100000095</Subject>
    ;                 <DocumentType number="10" />
    ;                 <Account code="0001" status="C" />
    ;                 <Amount>
    ;                     <Currency code="EUR" />
    ;                     <Value>1382.91</Value>
    ;                 </Amount>
    ;                 <References>
    ;                     <InvoiceNumber>100000095</InvoiceNumber>
    ;                 </References>
    ;                 <Attachments>
    ;                     <Attachment>
    ;                         <Name>F_100000095.PDF</Name>
    ;                         <BinaryData>BASE64_ENCODED_PDF_BYTES_HERE</BinaryData>
    ;                     </Attachment>
    ;                 </Attachments>
    ;             </Document>
    ;             <GLTransactionLine type="20" status="20" line="0" linetype="0">
    ;                 <Date>2022-04-05</Date>
    ;                 <VATType>S</VATType>
    ;                 <FinYear number="2022" />
    ;                 <FinPeriod number="4" />
    ;                 <GLAccount type="20" code="400000" />
    ;                 <Description>100000095</Description>
    ;                 <DueDate>2022-05-05</DueDate>
    ;                 <Account code="0001" status="C">
    ;                     <Name>90 Degrees &amp; co</Name>
    ;                 </Account>
    ;                 <Amount>
    ;                     <Currency code="EUR" />
    ;                     <Value>1382.91</Value>
    ;                 </Amount>
    ;                 <ForeignAmount>
    ;                     <Currency code="EUR" />
    ;                     <Value>1382.91</Value>
    ;                     <Rate>1</Rate>
    ;                 </ForeignAmount>
    ;                 <References>
    ;                     <InvoiceNumber>100000095</InvoiceNumber>
    ;                 </References>
    ;             </GLTransactionLine>
    ;             <PaymentTerms>
    ;                 <PaymentTerm entry="100000095" type="20" line="0" paymentMethod="B">
    ;                     <Description>20</Description>
    ;                     <GLAccount type="20" code="400000" />
    ;                     <Amount>
    ;                         <Currency code="EUR" />
    ;                         <Debit>1382.91</Debit>
    ;                         <Credit>0</Credit>
    ;                     </Amount>
    ;                     <ForeignAmount>
    ;                         <Currency code="EUR" />
    ;                         <Debit>1382.91</Debit>
    ;                         <Credit>0</Credit>
    ;                     </ForeignAmount>
    ;                     <Reference />
    ;                     <YourRef />
    ;                     <InvoiceNumber>100000095</InvoiceNumber>
    ;                     <InvoiceDate>2022-04-05</InvoiceDate>
    ;                     <DueDate>2022-05-05</DueDate>
    ;                     <PaymentDate>2022-05-05</PaymentDate>
    ;                 </PaymentTerm>
    ;             </PaymentTerms>
    ;         </GLTransaction>
    ;     </GLTransactions>
    ; </eExact>

    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkXml::ckLoadXmlFile(xml,"c:/temp/example.xml")
    If success = 0
        Debug CkXml::ckLastErrorText(xml)
        CkXml::ckDispose(xml)
        ProcedureReturn
    EndIf

    pdfFilename.s = CkXml::ckGetChildContent(xml,"GLTransactions|GLTransaction|Document|Attachments|Attachment|Name")
    If CkXml::ckLastMethodSuccess(xml) = 0
        Debug "No XML element at the given path."
        CkXml::ckDispose(xml)
        ProcedureReturn
    EndIf

    Debug "PDF Filename = " + pdfFilename

    binaryDataElem.i = CkXml::ckGetChildWithTag(xml,"GLTransactions|GLTransaction|Document|Attachments|Attachment|BinaryData")
    If CkXml::ckLastMethodSuccess(xml) = 0
        Debug "No XML element at the given path."
        CkXml::ckDispose(xml)
        ProcedureReturn
    EndIf

    ; Decode the base64 data and save to a file.
    success = CkXml::ckSaveBinaryContent(binaryDataElem,pdfFilename,0,0,"")
    If success = 0
        Debug CkXml::ckLastErrorText(binaryDataElem)
    Else
        Debug "Success."
    EndIf

    CkXml::ckDispose(binaryDataElem)



    CkXml::ckDispose(xml)


    ProcedureReturn
EndProcedure