Sample code for 30+ languages & platforms
Ruby

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

Ruby
require 'chilkat'

success = false

# The XML invoice is shown at the bottom of this example.
xml = Chilkat::CkXml.new()
success = xml.LoadXmlFile("qa_data/xml/fatture_invoice.xml")
if (success != true)
    print xml.lastErrorText() + "\n";
    exit
end

# Get the Base64 PDF content.
sb = Chilkat::CkStringBuilder.new()
success = xml.GetChildContentSb("FatturaElettronicaBody|Allegati|Attachment",sb)
if (success != true)
    print xml.lastErrorText() + "\n";
    exit
end

# Decode the base64
bd = Chilkat::CkBinData.new()
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>