Sample code for 30+ languages & platforms
SQL Server

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 SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    -- The XML invoice is shown at the bottom of this example.
    DECLARE @xml int
    EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    EXEC sp_OAMethod @xml, 'LoadXmlFile', @success OUT, 'qa_data/xml/fatture_invoice.xml'
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @xml, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @xml
        RETURN
      END

    -- Get the Base64 PDF content.
    DECLARE @sb int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sb OUT

    EXEC sp_OAMethod @xml, 'GetChildContentSb', @success OUT, 'FatturaElettronicaBody|Allegati|Attachment', @sb
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @xml, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @xml
        EXEC @hr = sp_OADestroy @sb
        RETURN
      END

    -- Decode the base64
    DECLARE @bd int
    EXEC @hr = sp_OACreate 'Chilkat.BinData', @bd OUT

    EXEC sp_OAMethod @bd, 'AppendEncodedSb', @success OUT, @sb, 'base64'

    -- Save to a PDF file.
    EXEC sp_OAMethod @bd, 'WriteFile', @success OUT, '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>

    EXEC @hr = sp_OADestroy @xml
    EXEC @hr = sp_OADestroy @sb
    EXEC @hr = sp_OADestroy @bd


END
GO