PureBasic
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
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 & 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