Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkXml.pb"
IncludeFile "CkStringBuilder.pb"

Procedure ChilkatExample()

    success.i = 0

    ; The XML invoice is shown at the bottom of this example.
    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkXml::ckLoadXmlFile(xml,"qa_data/xml/fatture_invoice.xml")
    If success <> 1
        Debug CkXml::ckLastErrorText(xml)
        CkXml::ckDispose(xml)
        ProcedureReturn
    EndIf

    ; Get the Base64 PDF content.
    sb.i = CkStringBuilder::ckCreate()
    If sb.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkXml::ckGetChildContentSb(xml,"FatturaElettronicaBody|Allegati|Attachment",sb)
    If success <> 1
        Debug CkXml::ckLastErrorText(xml)
        CkXml::ckDispose(xml)
        CkStringBuilder::ckDispose(sb)
        ProcedureReturn
    EndIf

    ; Decode the base64
    bd.i = CkBinData::ckCreate()
    If bd.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkBinData::ckAppendEncodedSb(bd,sb,"base64")

    ; Save to a PDF file.
    success = CkBinData::ckWriteFile(bd,"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>


    CkXml::ckDispose(xml)
    CkStringBuilder::ckDispose(sb)
    CkBinData::ckDispose(bd)


    ProcedureReturn
EndProcedure