Gestione delle fatture

Banner Hero per casi di utilizzo

È fantastico quando il business è in crescita, ma la produttività ne risente quando si tratta di preparare tutte quelle fatture. La generazione manuale delle fatture è un'operazione lunga che comporta inoltre il rischio di commettere errori, di perdere denaro o di indurre in errore un cliente con un importo errato.

Pensa ad esempio a Danielle che lavora nel ufficio contabilità di una società di forniture mediche. È la fine del mese, quindi sta estraendo informazioni da diversi sistemi, verificandone la precisione e formattando le fatture. Dopo tutto questo lavoro, è finalmente pronta a convertire i documenti in PDF (in modo che chiunque può visualizzarli senza acquistare software specifico) e inviare a ogni cliente la propria fattura personalizzata.

Anche quando la fatturazione mensile è completa, Danielle non può proprio sfuggire a quelle fatture. Alcuni clienti hanno cicli di fatturazione non mensili, quindi crea sempre una fattura per qualcuno. A volte, un cliente modifica la propria fattura e paga in difetto. Danielle quindi passa del tempo a risolvere questo problema di mancata corrispondenza della fattura. A questo ritmo, ha bisogno di assumere un assistente per tenere il passo con tutto il lavoro!

Quello di cui Danielle ha bisogno è un modo per generare fatture in modo rapido e preciso, sia in batch alla fine del mese che ad hoc in altri momenti. Idealmente, se potesse proteggere queste fatture dalle modifiche, non dovrebbe preoccuparsi di risolvere i problemi relativi agli importi non corrispondenti.

Cosa puoi imparare

In questo tutorial pratico scopri come utilizzare l’API di Document Generation di Adobe per generare automaticamente fatture, proteggere con password i PDF e fornire una fattura a ciascun cliente. È sufficiente conoscere Node.js, JavaScript, Express.js, HTML e CSS.

Il codice completo per questo progetto è disponibile su GitHub. È necessario impostare la directory pubblica con il modello e le cartelle dei dati non elaborati. In produzione, è necessario recuperare i dati da un’API esterna. Puoi anche esplorare questa versione archiviata dell'applicazione che contiene le risorse del modello.

API e risorse pertinenti

Preparazione dei dati

In questo tutorial non viene illustrato come importare i dati dai data warehouse. Gli ordini dei clienti possono essere presenti in un database, in un'API esterna o in un software personalizzato. L’API di generazione del documento di Adobe prevede un documento JSON contenente i dati di fatturazione, ad esempio le informazioni provenienti dalla piattaforma CRM (Customer Relationship Management) o e-Commerce. Questo tutorial presuppone che i dati siano già in formato JSON.

Per semplicità, utilizza la seguente struttura JSON per la fatturazione:

{
    "customerName": "John Doe",
    "customerEmail": "john-doe@example.com",
    "order": [
        {
            "productId": 26,
            "productTitle": "Bandages",
            "price": 15.82
        },
        {
            "productId": 54,
            "productTitle": "Masks",
            "price": 25
        },
        {
            "productId": 76,
            "productTitle": "Gloves",
            "price": 7.59
        }
    ]
}

Il documento JSON contiene i dettagli del cliente e le informazioni sull'ordine. Utilizzare questo documento strutturato per creare la fattura e visualizzare gli elementi in formato PDF.

Creazione di un modello di fattura

L’API di Document Generation di Adobe prevede che un modello basato su Microsoft Word e un documento JSON creino un documento PDF o Word dinamico. Creare un modello di Microsoft Word per l'applicazione di fatturazione e utilizzare componente aggiuntivo gratuito Document Generation Tagger per generare i tag dei modelli. Installa il componente aggiuntivo e apri la scheda in Microsoft Word.

Schermata del componente aggiuntivo Document Generation Tagger

Una volta incollato il contenuto JSON nel componente aggiuntivo, come mostrato sopra, fai clic su Genera tag. Ora questo plug-in mostra il formato dell'oggetto. Il modello di base può utilizzare il nome e l'indirizzo e-mail del cliente, ma non mostra le informazioni sull'ordine. Le informazioni sull'ordine sono discusse più avanti in questo tutorial.

Schermata del modello Autore di Document Generation Tagger

Inizia a scrivere il modello di fattura nel tuo documento Microsoft Word. Lasciare il cursore nel punto in cui è necessario inserire i dati dinamici, quindi selezionare il tag dalla finestra del componente aggiuntivo di Adobe. Fai clic Inserisci testo Adobe in modo che il componente aggiuntivo Document Generation Tagger possa generare e inserire i tag. Per la personalizzazione, inseriamo il nome e l'e-mail del cliente.

Ora passa ai dati che cambiano con ogni nuova fattura. Selezionare il Avanzate del componente aggiuntivo. Per visualizzare le opzioni disponibili per generare una tabella dinamica basata sui prodotti ordinati da un cliente, fare clic su Tabelle ed elenchi .

Seleziona Ordine dal primo menu a discesa. Nel secondo menu a discesa selezionare le colonne per questa tabella. In questo tutorial, selezionate tutte e tre le colonne per l’oggetto di cui eseguire il rendering della tabella.

Schermata della scheda Avanzate di Document Generation Tagger

L’API di Document Generation può anche eseguire operazioni complesse come l’aggregazione di elementi all’interno di un array. Nella Avanzate , seleziona Calcoli numerici e nella aggregazione , selezionare il campo in cui si desidera applicare il calcolo.

Schermata dei calcoli numerici di Document Generation Tagger

Fare clic sul pulsante Inserisci calcolo per inserire il tag all’interno del documento, se necessario. Nel file Microsoft Word viene ora visualizzato il testo seguente:

Schermata dei tag nel documento Microsoft Word

Questo esempio di fattura contiene le informazioni sul cliente, i prodotti ordinati e l'importo totale dovuto.

Generazione di una fattura utilizzando l’API di generazione del documento di Adobe

Utilizza il kit di sviluppo software (SDK) Adobe PDF Services Node.js per combinare i documenti Microsoft Word e JSON. Crea un’applicazione Node.js per creare la fattura utilizzando l’API di Document Generation.

L’API di Servizi PDF include il servizio Document Generation, che consente di utilizzare le stesse credenziali per entrambi. Apprezzate versione di prova gratuita per sei mesi, quindi paga solo $0,05 per transazione documento.

Ecco il codice per unire il PDF:

async function compileDocFile(json, inputFile, outputPdf) {
    try {
        // configurations
        const credentials =  adobe.Credentials
            .serviceAccountCredentialsBuilder()
            .fromFile("./src/pdftools-api-credentials.json")
            .build();

        // Capture the credential from app and show create the context
        const executionContext = adobe.ExecutionContext.create(credentials);

        // create the operation
        const documentMerge = adobe.DocumentMerge,
            documentMergeOptions = documentMerge.options,
            options = new documentMergeOptions.DocumentMergeOptions(json, documentMergeOptions.OutputFormat.PDF);

        const operation = documentMerge.Operation.createNew(options);

        // Pass the content as input (stream)
        const input = adobe.FileRef.createFromLocalFile(inputFile);
        operation.setInput(input);

        // Async create the PDF
        let result = await operation.execute(executionContext);
        await result.saveAsFile(outputPdf);
    } catch (err) {
        console.log('Exception encountered while executing operation', err);
    }
}

Questo codice prende le informazioni dal documento JSON di input e dal file del modello di input. Viene quindi creata un’operazione di unione dei documenti per combinare i file in un unico report PDF. Infine, esegue l’operazione con le tue credenziali API. Se non li hai già, crea credenziali (L’API di Document Generation e PDF Services utilizza le stesse credenziali).

Utilizzare questo codice all'interno del router Express per gestire la richiesta di documento:

// Create one report and send it back
try {
    console.log(\`[INFO] generating the report...\`);
    const fileContent = fs.readFileSync(\`./public/documents/raw/\${vendor}\`,
    'utf-8');
    const parsedObject = JSON.parse(fileContent);

    await pdf.compileDocFile(parsedObject,
    \`./public/documents/template/Adobe-Invoice-Sample.docx\`,
    \`./public/documents/processed/output.pdf\`);

    await pdf.applyPassword("p@55w0rd", './public/documents/processed/output.pdf',
    './public/documents/processed/output-secured.pdf');

    console.log(\`[INFO] sending the report...\`);
    res.status(200).render("preview", { page: 'invoice', filename: 'output.pdf' });
} catch(error) {
    console.log(\`[ERROR] \${JSON.stringify(error)}\`);
    res.status(500).render("crash", { error: error });
}

Una volta eseguito, questo codice fornisce un documento PDF contenente la fattura generata dinamicamente in base ai dati forniti. Con i dati JSON di esempio (forniti sopra), l'output di questo codice è:

Schermata della fattura PDF generata dinamicamente

Questa fattura include i dati dinamici dal documento JSON.

Protezione delle fatture tramite password

Dal momento che Danielle la ragioneria è preoccupata che i clienti alterino la fattura, applica una password per limitare la modifica. API di PDF Services può applicare automaticamente una password ai documenti. In questo caso, per proteggere i documenti con una password si utilizza Adobe PDF Services SDK. Il codice è:

async function applyPassword(password, inputFile, outputFile) {
    try {
        // Initial setup, create credentials instance.
        const credentials = adobe.Credentials
        .serviceAccountCredentialsBuilder()
        .fromFile("./src/pdftools-api-credentials.json")
        .build();

        // Create an ExecutionContext using credentials
        const executionContext = adobe.ExecutionContext.create(credentials);
        // Create new permissions instance and add the required permissions
        const protectPDF = adobe.ProtectPDF,
        protectPDFOptions = protectPDF.options;
        // Build ProtectPDF options by setting an Owner/Permissions Password, Permissions,
        // Encryption Algorithm (used for encrypting the PDF file) and specifying the type of content to encrypt.
        const options = new protectPDFOptions.PasswordProtectOptions.Builder()
        .setOwnerPassword(password)
        .setEncryptionAlgorithm(protectPDFOptions.EncryptionAlgorithm.AES_256)
        .build();

        // Create a new operation instance.
        const protectPDFOperation = protectPDF.Operation.createNew(options);

        // Set operation input from a source file.
        const input = adobe.FileRef.createFromLocalFile(inputFile);
        protectPDFOperation.setInput(input);

        // Execute the operation and Save the result to the specified location.
        let result = await protectPDFOperation.execute(executionContext);

        result.saveAsFile(outputFile);
    } catch (err) {
        console.log('Exception encountered while executing operation', err);
    }
}

Quando utilizzi questo codice, protegge il documento con una password e carica una nuova fattura nel sistema. Per ulteriori informazioni sull'utilizzo di questo codice o per provarlo, vedere esempio di codice.

Una volta completata la fattura, potresti voler inviare automaticamente via e-mail al cliente. Esistono alcuni modi per inviare automaticamente un'e-mail ai clienti. Il modo più rapido è utilizzare un’API e-mail di terze parti insieme a una libreria di supporto come sendgrid-nodejs. In alternativa, se si dispone già dell'accesso a un server SMTP è possibile utilizzare nodemailer per inviare e-mail tramite SMTP.

Fasi seguenti

In questo tutorial pratico, hai creato una semplice app per aiutare Danielle in contabilità con fatturazione. Utilizzando l’API di PDF Services e l’SDK di generazione del documento, è stato compilato un modello Microsoft Word con le informazioni sull’ordine dei clienti da un documento JSON, creando una fattura PDF. Quindi, ogni documento è protetto da password utilizzando i servizi di protezione con password di API di PDF Services.

Dal momento che Danielle può generare fatture automaticamente e non deve preoccuparsi che i clienti modifichino le loro fatture, non dovrà assumere un assistente che le aiuti a svolgere tutto il lavoro manuale. Può utilizzare il suo tempo extra per trovare risparmi sui costi nei file di contabilità fornitori.

Ora che hai visto quanto è facile, puoi espandere questa semplice app utilizzando altri strumenti di Adobe per incorporare le fatture sul tuo sito Web. Ad esempio, in modo che i clienti possano visualizzare le fatture o il saldo in qualsiasi momento. API di Adobe PDF Embed è libero di usare. Puoi anche passare al reparto Risorse umane o vendite, automatizzando gli accordi e raccogliendo firme elettroniche.

Per esplorare tutte le possibilità e iniziare a creare la tua pratica applicazione, crea un Adobe Acrobat Services per iniziare oggi. Prova gratis per sei mesi pay-as-you-go
a soli $ 0,05 per ogni transazione di documenti in base al ridimensionamento dell'azienda.

recommendation-more-help
61c3404d-2baf-407c-beb9-87b95f86ccab