Lazarus Pascal
Lazarus Pascal
Extract and Save PDF from SOAP XML
See more XML Examples
Demonstrates how to extract and save PDF file that is embedded in SOAP XML (or any XML).Chilkat Lazarus Pascal 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;
pdfElement: TXml;
begin
success := False;
xml := TXml.Create;
success := xml.LoadXmlFile('qa_data/soap/soapWithPdf.xml');
if (success <> True) then
begin
WriteLn(xml.LastErrorText);
Exit;
end;
// The XML we loaded looks like this:
// <?xml version="1.0" encoding="utf-8" ?>
// <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
// <s:Body>
// <ObtenerPDFResponse xmlns="http://xyz.org/">
// <ObtenerPDFResult xmlns:a="http://schemas.xyz.org/something" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
// <a:CBB i:nil="true" />
// <a:CodigoConfirmacion i:nil="true" />
// <a:ErrorDetallado />
// <a:ErrorGeneral i:nil="true" />
// <a:FechaGenerada i:nil="true" />
// <a:FolioGenerado i:nil="true" />
// <a:OperacionExitosa>true</a:OperacionExitosa>
// <a:PDF>JVBERi0xLjQKJe...</a:PDF>
// <a:XML i:nil="true" />
// </ObtenerPDFResult>
// </ObtenerPDFResponse>
// </s:Body>
// </s:Envelope>
pdfElement := xml.FindChild('s:Body|ObtenerPDFResponse|ObtenerPDFResult|a:PDF');
if (xml.LastMethodSuccess <> True) then
begin
WriteLn('Did not find the PDF element at the expected location.');
Exit;
end;
success := pdfElement.SaveBinaryContent('qa_output/out.pdf',False,False,'');
if (success <> True) then
begin
WriteLn(xml.LastErrorText);
Exit;
end;
WriteLn('Successfully extracted and saved the PDF.');
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.