Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

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 Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Xml;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  xml: TXml;
  pdfFilename: string;
  binaryDataElem: TXml;

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 := TXml.Create;

  success := xml.LoadXmlFile('c:/temp/example.xml');
  if (success = False) then
    begin
      WriteLn(xml.LastErrorText);
      Exit;
    end;

  pdfFilename := xml.GetChildContent('GLTransactions|GLTransaction|Document|Attachments|Attachment|Name');
  if (xml.LastMethodSuccess = False) then
    begin
      WriteLn('No XML element at the given path.');
      Exit;
    end;

  WriteLn('PDF Filename = ' + pdfFilename);

  binaryDataElem := xml.GetChildWithTag('GLTransactions|GLTransaction|Document|Attachments|Attachment|BinaryData');
  if (xml.LastMethodSuccess = False) then
    begin
      WriteLn('No XML element at the given path.');
      Exit;
    end;

  //  Decode the base64 data and save to a file.
  success := binaryDataElem.SaveBinaryContent(pdfFilename,False,False,'');
  if (success = False) then
    begin
      WriteLn(binaryDataElem.LastErrorText);
    end
  else
    begin
      WriteLn('Success.');
    end;

  binaryDataElem.Free;


  xml.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.