Sample code for 30+ languages & platforms
Xbase++

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 Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oXml
LOCAL cPdfFilename
LOCAL oBinaryDataElem

nSuccess := 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>

oXml := CreateObject("Chilkat.Xml")

nSuccess := oXml:LoadXmlFile("c:/temp/example.xml")
IF (nSuccess == 0)
    ? oXml:LastErrorText
    oXml:destroy()
    RETURN
ENDIF

cPdfFilename := oXml:GetChildContent("GLTransactions|GLTransaction|Document|Attachments|Attachment|Name")
IF (oXml:LastMethodSuccess == 0)
    ? "No XML element at the given path."
    oXml:destroy()
    RETURN
ENDIF

? "PDF Filename = " + cPdfFilename

oBinaryDataElem := oXml:GetChildWithTag("GLTransactions|GLTransaction|Document|Attachments|Attachment|BinaryData")
IF (oXml:LastMethodSuccess == 0)
    ? "No XML element at the given path."
    oXml:destroy()
    RETURN
ENDIF

//  Decode the base64 data and save to a file.
nSuccess := oBinaryDataElem:SaveBinaryContent(cPdfFilename, 0, 0, "")
IF (nSuccess == 0)
    ? oBinaryDataElem:LastErrorText
ELSE
    ? "Success."
ENDIF

oBinaryDataElem:destroy()

oXml:destroy()