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

Extract PDF Invoice from FatturaElettronica XML

See more XML Examples

Demonstrates how to extract a PDF attachment from an XML invoice (fattura elettronica) -- ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2

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.BinData,
  Chilkat.StringBuilder,
  Chilkat.Xml;

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

procedure RunDemo;
var
  success: Boolean;
  xml: TXml;
  sb: TStringBuilder;
  bd: TBinData;

begin
  success := False;

  //  The XML invoice is shown at the bottom of this example.
  xml := TXml.Create;
  success := xml.LoadXmlFile('qa_data/xml/fatture_invoice.xml');
  if (success <> True) then
    begin
      WriteLn(xml.LastErrorText);
      Exit;
    end;

  //  Get the Base64 PDF content.
  sb := TStringBuilder.Create;
  success := xml.GetChildContentSb('FatturaElettronicaBody|Allegati|Attachment',sb);
  if (success <> True) then
    begin
      WriteLn(xml.LastErrorText);
      Exit;
    end;

  //  Decode the base64
  bd := TBinData.Create;
  success := bd.AppendEncodedSb(sb,'base64');

  //  Save to a PDF file.
  success := bd.WriteFile('qa_output/fattura.pdf');

  //  This is the XML invoice loaded from fatture_invoice.xml
  //  It is populated with junk information.

  //  <?xml version="1.0" encoding="utf-8"?>
  //  <nr1:FatturaElettronica versione="FPR12" xmlns:nr1="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2">
  //      <FatturaElettronicaHeader>
  //          <DatiTrasmissione>
  //              <IdTrasmittente>
  //                  <IdPaese>IT</IdPaese>
  //                  <IdCodice>9999999999</IdCodice>
  //              </IdTrasmittente>
  //              <ProgressivoInvio>01E99</ProgressivoInvio>
  //              <FormatoTrasmissione>FPR99</FormatoTrasmissione>
  //              <CodiceDestinatario>0000000</CodiceDestinatario>
  //              <PECDestinatario>fatture.elettroniche@pec.something.it</PECDestinatario>
  //          </DatiTrasmissione>
  //          <CedentePrestatore>
  //              <DatiAnagrafici>
  //                  <IdFiscaleIVA>
  //                      <IdPaese>IT</IdPaese>
  //                      <IdCodice>9999999999</IdCodice>
  //                  </IdFiscaleIVA>
  //                  <CodiceFiscale>9999999999</CodiceFiscale>
  //                  <Anagrafica>
  //                      <Denominazione>Chilkat S.p.A.</Denominazione>
  //                  </Anagrafica>
  //                  <RegimeFiscale>RF01</RegimeFiscale>
  //              </DatiAnagrafici>
  //              <Sede>
  //                  <Indirizzo>Via Xyzabcde, 99/2</Indirizzo>
  //                  <CAP>40127</CAP>
  //                  <Comune>Bologna</Comune>
  //                  <Provincia>BO</Provincia>
  //                  <Nazione>IT</Nazione>
  //              </Sede>
  //              <IscrizioneREA>
  //                  <Ufficio>BO</Ufficio>
  //                  <NumeroREA>9999999</NumeroREA>
  //                  <CapitaleSociale>9999999999.00</CapitaleSociale>
  //                  <SocioUnico>SM</SocioUnico>
  //                  <StatoLiquidazione>LN</StatoLiquidazione>
  //              </IscrizioneREA>
  //          </CedentePrestatore>
  //          <CessionarioCommittente>
  //              <DatiAnagrafici>
  //                  <IdFiscaleIVA>
  //                      <IdPaese>IT</IdPaese>
  //                      <IdCodice>9999999999</IdCodice>
  //                  </IdFiscaleIVA>
  //                  <Anagrafica>
  //                      <Denominazione>GRUPPO ABCDEF SRL</Denominazione>
  //                  </Anagrafica>
  //              </DatiAnagrafici>
  //              <Sede>
  //                  <Indirizzo>VIALE ABCDEF 1</Indirizzo>
  //                  <CAP>73010</CAP>
  //                  <Comune>XYZ</Comune>
  //                  <Provincia>LE</Provincia>
  //                  <Nazione>IT</Nazione>
  //              </Sede>
  //          </CessionarioCommittente>
  //      </FatturaElettronicaHeader>
  //      <FatturaElettronicaBody>
  //          <DatiGenerali>
  //              <DatiGeneraliDocumento>
  //                  <TipoDocumento>ABC04</TipoDocumento>
  //                  <Divisa>EUR</Divisa>
  //                  <Data>2018-12-31</Data>
  //                  <Numero>9999999999</Numero>
  //                  <ImportoTotaleDocumento>354.71</ImportoTotaleDocumento>
  //                  <Causale>RIFERIMENTO TICKET 999999</Causale>
  //                  <Causale>FATTURA NR. 9999999999 DEL 30.09.2018</Causale>
  //                  <Causale>DIFFERENZA PREZZO</Causale>
  //                  <Causale>RIF. FORN. ABCDEF clam</Causale>
  //                  <Causale>RIF. CLIENTE: ABCDEF</Causale>
  //                  <Causale>XYZ - ABCDEF</Causale>
  //                  <Causale>Assolve gli obblighi di ... in L.27/2012</Causale>
  //                  <Causale>Contributo ambientale ABCDEF assolto</Causale>
  //              </DatiGeneraliDocumento>
  //              <DatiFattureCollegate>
  //                  <IdDocumento>9999999999</IdDocumento>
  //                  <Data>2018-09-30</Data>
  //              </DatiFattureCollegate>
  //          </DatiGenerali>
  //          <DatiBeniServizi>
  //              <DettaglioLinee>
  //                  <NumeroLinea>1</NumeroLinea>
  //                  <CodiceArticolo>
  //                      <CodiceTipo>Codice Art. ABC</CodiceTipo>
  //                      <CodiceValore>9999999999</CodiceValore>
  //                  </CodiceArticolo>
  //                  <CodiceArticolo>
  //                      <CodiceTipo>EAN</CodiceTipo>
  //                      <CodiceValore>9999999999</CodiceValore>
  //                  </CodiceArticolo>
  //                  <Descrizione>ABC 123 XY</Descrizione>
  //                  <Quantita>1.00</Quantita>
  //                  <UnitaMisura>NR</UnitaMisura>
  //                  <PrezzoUnitario>72.57000000</PrezzoUnitario>
  //                  <PrezzoTotale>72.57</PrezzoTotale>
  //                  <AliquotaIVA>4.00</AliquotaIVA>
  //                  <AltriDatiGestionali>
  //                      <TipoDato>DP</TipoDato>
  //                      <RiferimentoTesto>999999999 GRUPPO BLAH BLAH BLAH PL(LE)</RiferimentoTesto>
  //                  </AltriDatiGestionali>
  //              </DettaglioLinee>
  //              <DettaglioLinee>
  //                  <NumeroLinea>2</NumeroLinea>
  //                  <CodiceArticolo>
  //                      <CodiceTipo>Codice Art. ABCDEF</CodiceTipo>
  //                      <CodiceValore>9999999999</CodiceValore>
  //                  </CodiceArticolo>
  //                  <CodiceArticolo>
  //                      <CodiceTipo>EAN</CodiceTipo>
  //                      <CodiceValore>9999999999</CodiceValore>
  //                  </CodiceArticolo>
  //                  <Descrizione>ABCDEF XYZ MID</Descrizione>
  //                  <Quantita>1.00</Quantita>
  //                  <UnitaMisura>NR</UnitaMisura>
  //                  <PrezzoUnitario>268.50000000</PrezzoUnitario>
  //                  <PrezzoTotale>268.50</PrezzoTotale>
  //                  <AliquotaIVA>4.00</AliquotaIVA>
  //                  <AltriDatiGestionali>
  //                      <TipoDato>DP</TipoDato>
  //                      <RiferimentoTesto>999999999 GRUPPO BLAH BLAH BLAH PL(LE)</RiferimentoTesto>
  //                  </AltriDatiGestionali>
  //              </DettaglioLinee>
  //              <DatiRiepilogo>
  //                  <AliquotaIVA>4.00</AliquotaIVA>
  //                  <Arrotondamento>0.00</Arrotondamento>
  //                  <ImponibileImporto>341.07</ImponibileImporto>
  //                  <Imposta>13.64</Imposta>
  //                  <EsigibilitaIVA>I</EsigibilitaIVA>
  //              </DatiRiepilogo>
  //          </DatiBeniServizi>
  //          <DatiPagamento>
  //              <CondizioniPagamento>XX02</CondizioniPagamento>
  //              <DettaglioPagamento>
  //                  <ModalitaPagamento>XX05</ModalitaPagamento>
  //                  <DataScadenzaPagamento>2018-11-30</DataScadenzaPagamento>
  //                  <ImportoPagamento>354.71</ImportoPagamento>
  //              </DettaglioPagamento>
  //          </DatiPagamento>
  //          <Allegati>
  //              <NomeAttachment>9999_2018_2130009999.pdf</NomeAttachment>
  //              <FormatoAttachment>pdf</FormatoAttachment>
  //              <DescrizioneAttachment>In allegato documento non valido ai fini fiscali</DescrizioneAttachment>
  //              <Attachment>JVBERi0xLjMNCiXi48/TDQoyIDAgb ...
  //  ... BASE64 PDF DATA HERE ...
  //  ... BASE64 PDF DATA HERE ...
  //  ... BASE64 PDF DATA HERE ...
  //  ... BASE64 PDF DATA HERE ...
  //  ... BASE64 PDF DATA HERE ...
  //  ... BASE64 PDF DATA HERE ...
  //  AAAAAAAAAAAAAAAAAAA=</Attachment>
  //          </Allegati>
  //      </FatturaElettronicaBody>
  //  </nr1:FatturaElettronica>


  xml.Free;
  sb.Free;
  bd.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.