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