SQL Server
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.2Chilkat SQL Server Downloads
-- 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