Sample code for 30+ languages & platforms
DataFlex

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 DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoXml
    String sPdfFilename
    Variant vBinaryDataElem
    Handle hoBinaryDataElem
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    // 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>

    Get Create (RefClass(cComChilkatXml)) To hoXml
    If (Not(IsComObjectCreated(hoXml))) Begin
        Send CreateComObject of hoXml
    End

    Get ComLoadXmlFile Of hoXml "c:/temp/example.xml" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoXml To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComGetChildContent Of hoXml "GLTransactions|GLTransaction|Document|Attachments|Attachment|Name" To sPdfFilename
    Get ComLastMethodSuccess Of hoXml To bTemp1
    If (bTemp1 = False) Begin
        Showln "No XML element at the given path."
        Procedure_Return
    End

    Showln "PDF Filename = " sPdfFilename

    Get ComGetChildWithTag Of hoXml "GLTransactions|GLTransaction|Document|Attachments|Attachment|BinaryData" To vBinaryDataElem
    If (IsComObject(vBinaryDataElem)) Begin
        Get Create (RefClass(cComChilkatXml)) To hoBinaryDataElem
        Set pvComObject Of hoBinaryDataElem To vBinaryDataElem
    End
    Get ComLastMethodSuccess Of hoXml To bTemp1
    If (bTemp1 = False) Begin
        Showln "No XML element at the given path."
        Procedure_Return
    End

    // Decode the base64 data and save to a file.
    Get ComSaveBinaryContent Of hoBinaryDataElem sPdfFilename False False "" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoBinaryDataElem To sTemp1
        Showln sTemp1
    End
    Else Begin
        Showln "Success."
    End

    Send Destroy of hoBinaryDataElem


End_Procedure