Sample code for 30+ languages & platforms
Delphi DLL

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 Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Xml;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
xml: HCkXml;
pdfFilename: PWideChar;
binaryDataElem: HCkXml;

begin
success := False;

// 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 := CkXml_Create();

success := CkXml_LoadXmlFile(xml,'c:/temp/example.xml');
if (success = False) then
  begin
    Memo1.Lines.Add(CkXml__lastErrorText(xml));
    Exit;
  end;

pdfFilename := CkXml__getChildContent(xml,'GLTransactions|GLTransaction|Document|Attachments|Attachment|Name');
if (CkXml_getLastMethodSuccess(xml) = False) then
  begin
    Memo1.Lines.Add('No XML element at the given path.');
    Exit;
  end;

Memo1.Lines.Add('PDF Filename = ' + pdfFilename);

binaryDataElem := CkXml_GetChildWithTag(xml,'GLTransactions|GLTransaction|Document|Attachments|Attachment|BinaryData');
if (CkXml_getLastMethodSuccess(xml) = False) then
  begin
    Memo1.Lines.Add('No XML element at the given path.');
    Exit;
  end;

// Decode the base64 data and save to a file.
success := CkXml_SaveBinaryContent(binaryDataElem,pdfFilename,False,False,'');
if (success = False) then
  begin
    Memo1.Lines.Add(CkXml__lastErrorText(binaryDataElem));
  end
else
  begin
    Memo1.Lines.Add('Success.');
  end;

CkXml_Dispose(binaryDataElem);

CkXml_Dispose(xml);

end;