Passa al contenuto principale

Creare modelli avanzati per la generazione di documenti

13 min read
SEO and Content Writer

La generazione di documenti tramite stampa unione consiste nel leggere valori da un'origine dati e inserire ciascuno nel segnaposto corrispondente di un modello. Conservi due elementi: un modello che contiene i campi di unione (le variabili in attesa di essere riempite) e un'origine dati che fornisce i valori più tutto ciò che resta uguale su ogni copia. Il motore di reporting di PDF4me prende questi due file e restituisce un documento finito.

PDF4me accetta modelli Word, HTML e PDF, e il più ricco dei tre è Word. Con una sintassi breve e leggibile puoi progettare un unico modello Word che copre fatture, ricevute, contratti, preventivi o qualsiasi documento personalizzato, e generarne migliaia dai dati. Questa guida percorre tutta la sintassi — campi di unione, condizioni, formattazione, tabelle, immagini e HTML in linea — con esempi pronti da copiare e un modello di esempio che puoi scaricare ed eseguire. Ogni collegamento di sintassi punta alla pagina esatta della documentazione sulla sintassi dei modelli Word.

I mattoni in breve
Campi di unione
Il segnaposto centrale. Scrivi <<[FieldName]>> in Word e il motore lo sostituisce con il valore corrispondente dei tuoi dati.
Condizioni
Mostra o nascondi contenuti con <<if>>, <<elseif>> e <<else>>, così un unico modello copre ogni caso.
Formattazione
Dai forma a un valore in linea con <<[token]:"format">> per date, formati numerici e maiuscole/minuscole.
Tabelle e cicli
Ripeti una riga o un'intera sezione per ogni elemento di un elenco con <<foreach>>.
Immagini
Inserisci un logo, una foto o una firma in una casella di testo con <<image [imageUrl]>> da un URL o da Base64.
HTML in linea
Renderizza HTML preformattato direttamente nel documento con l'opzione <<[token] -html>>.
In breve

Scrivi i segnaposto come <<[FieldName]>> in un documento Word. Aggiungi condizioni, formattazione, cicli, immagini e HTML con una manciata di token in più. Invia quel modello insieme a un file di dati JSON (o XML) all'azione Generate Document di PDF4me e ottieni un documento personalizzato e finito — una volta o a migliaia.

Come si progetta un modello Word?​

Tutto inizia con un segnaposto. Ovunque tu voglia inserire un valore, digita il nome del campo racchiuso tra doppie parentesi angolari e parentesi quadre:

<<[FieldName]>>

Il nome tra parentesi deve corrispondere a una proprietà della tua origine dati. Mantieni nomi descrittivi, usa un'unica convenzione (camelCase o PascalCase) ed evita caratteri speciali. Ecco un modello minimo e i dati che lo riempiono:

Dear <<[CustomerName]>>,

Thank you for your order #<<[OrderNumber]>>.
{
"CustomerName": "John Smith",
"OrderNumber": "12345"
}

Il motore restituisce:

Dear John Smith,

Thank you for your order #12345.

Questa è tutta l'idea. Tutto ciò che segue è una variazione dello stesso principio — condizioni, cicli e formattazione avvolgono sempre normali campi di unione. I dettagli completi si trovano nella Panoramica della sintassi.

Come si aggiungono condizioni a un modello?​

L'azione Generate Document può ramificarsi in base ai tuoi dati. A seconda che una condizione sia vera, inserisce un blocco di contenuto o un altro. La struttura di base if / elseif / else si legge così:

<<if [condition1]>> Add the first block
<<elseif [condition2]>> Add the second block
<<else>> Add the fallback block
<</if>>

Le condizioni possono verificare un valore direttamente o appoggiarsi ai metodi di enumerazione (più avanti), ad esempio <<if [employees.Any(p => p.Age > 50)]>>. Trovi l'insieme completo degli operatori di confronto e logici in Logica condizionale.

Come si formattano i valori in un modello?​

Spesso un valore grezzo va preparato prima di essere inserito — una data in uno stile preciso, un numero arrotondato, testo in maiuscolo. Aggiungi una specifica di formato dopo il nome del campo, separata da due punti e tra virgolette:

<<[token]:"format">>

Le date usano un pattern in stile .NET:

Invoice Date: <<[invoiceDate]:"dd.MM.yyyy">>
Due Date: <<[dueDate]:"MMMM dd, yyyy">>

Le maiuscole/minuscole hanno le proprie opzioni brevi — :upper, :caps (mettere in maiuscolo ogni parola) e :firstCap:

Customer: <<[customerName]:upper>>
Product: <<[productName]:caps>>

I numeri usano formati numerici standard, così <<[price]:"F2">> fissa un valore a due decimali. L'elenco completo dei pattern di data, testo e numero è in Formattazione nei modelli.

Come si costruiscono tabelle da un elenco?​

È nelle tabelle che la generazione di documenti dà il meglio — una riga del modello si espande in tante righe quante ne hanno i dati. Crea una normale tabella Word, apri un ciclo <<foreach>> nella prima cella, aggiungi un campo di unione in ogni cella successiva e chiudi il ciclo nell'ultima cella:

Column 1: <<foreach [product in products]>><<[product.productName]>>
Column 2: <<[product.manufactured]:"yyyy.MM.dd">>
Column 3: <<[product.price]>><</foreach>>

Ogni oggetto dell'array products diventa una riga e puoi formattare le celle in linea come ovunque. Altri pattern di tabella, incluse righe filtrate e aggregate, sono trattati in Tabelle nei modelli.

Come si ripetono paragrafi e sezioni?​

Lo stesso ciclo <<foreach>> funziona anche fuori dalle tabelle. Avvolgi un qualsiasi blocco di contenuto — un paragrafo, un titolo con il suo corpo, un'intera sezione — e si ripete una volta per ogni elemento della raccolta:

<<foreach [item in collection]>>
Content with <<[item.property]>>
<</foreach>>

I cicli possono essere annidati (una sezione per reparto, una riga per dipendente al suo interno) e possono filtrare o ordinare la raccolta strada facendo. Vedi Ripetere paragrafi e sezioni per esempi annidati e condizionali.

Come si aggiungono immagini a un modello?​

PDF4me può inserire immagini in un documento generato da un URL pubblico o da una stringa Base64. Una regola conta: il campo immagine deve trovarsi dentro una Casella di testo di Word. Crea la casella di testo dove vuoi l'immagine, poi aggiungi il campo.

Da un URL pubblico:

<<image [imageUrl]>>

Da una stringa codificata in Base64:

<<image [imageBase64]>>

Controlli le dimensioni con opzioni come -keepRatio, -fitHeight, -fitWidth e -fitSize, ad es. <<image [companyLogo] -keepRatio>>. Il riferimento completo alle dimensioni e gli esempi di immagini per riga si trovano in Inserire immagini.

Come si inserisce HTML in un modello?​

Se i tuoi dati contengono già HTML formattato, renderizzalo sul posto con l'opzione -html invece di sfuggirlo come testo semplice:

<<[token] -html>>

Il motore analizza il valore del campo come HTML e applica la formattazione — grassetto, corsivo, elenchi, titoli, span colorati e altro — all'interno del documento generato. I tag e gli stili supportati sono elencati in Inserire HTML.

Lavora sui tuoi dati con i metodi di enumerazione​

Oltre ai campi semplici, il motore espone metodi in stile IEnumerable che puoi richiamare direttamente in un token — filtrare, ordinare, contare, calcolare la media e altro. Alcuni esempi:

Total products: <<[products.Count()]>>
Average price: $<<[products.Average(p => p.price)]:"F2">>
Top items: <<foreach [p in products.OrderByDescending(x => x.price).Take(5)]>><<[p.name]>><</foreach>>

Si combinano naturalmente con condizioni e cicli. L'elenco completo dei metodi — Where, OrderBy, GroupBy, Sum, Any, First e il resto — è in Enumerazione nei modelli.

Modello di esempio da provare
Scarica un modello Word pronto e i suoi dati JSON, poi passali attraverso l'azione Generate Document per vedere il tutto funzionare dall'inizio alla fine.

I dati di esempio hanno questo aspetto — un fornitore, un cliente e un elenco di prodotti su cui il modello itera:

{
"VendorName": "PDF4me",
"VendorCity": "Zurich",
"VendorCountry": "Switzerland",
"VendorZip": "8630",
"VendorContact": "123456",
"InvoiceDate": "22-08-2022",
"CustomerName": "John Doe",
"CustomerCity": "Start City",
"CustomerCountry": "US",
"CustomerZip": "3214",
"products": [
{ "productName": "PDF Converter", "value": 2000, "expires": "01/08/2025" },
{ "productName": "PDF API", "value": 1250, "expires": "18/02/2029" },
{ "productName": "PDF Editor", "value": 1999, "expires": "12/12/2027" }
],
"comments": "This document is <b>computer generated</b> and does not require a signature."
}

Nota che comments contiene HTML — abbinalo all'opzione <<[comments] -html>> e il tag <b> verrà reso in grassetto nell'output.


Domande frequenti​

Come creo i campi di unione in un modello Word?​

Digita il nome del campo tra doppie parentesi angolari e parentesi quadre, come <<[CustomerName]>>, ovunque tu voglia inserire un valore. Il nome deve corrispondere a una proprietà della tua origine dati JSON o XML. Puoi aggiungere campi manualmente ovunque — titoli, paragrafi, celle di tabella o caselle di testo.

Quali formati di modello supporta PDF4me?​

Word (.docx, .doc), HTML e PDF. Tutti e tre usano la stessa sintassi dei campi di unione, quindi ciò che impari per un modello Word si trasferisce. Word offre il controllo più completo su layout, condizioni, tabelle e immagini.

Posso aggiungere condizioni if/else a un modello Word?​

Sì. Avvolgi il contenuto con <<if [condition]>> ... <<elseif [condition]>> ... <<else>> ... <</if>>. Una condizione può confrontare un campo direttamente o richiamare un metodo di enumerazione come Any() o Count(). Così un unico modello gestisce ogni variante dei tuoi dati invece di mantenere un file per caso.

Come formatto date e numeri in un modello?​

Metti il formato dopo il nome del campo, tra virgolette: <<[invoiceDate]:"dd.MM.yyyy">> per una data, <<[price]:"F2">> per un numero con due decimali. Le maiuscole/minuscole hanno opzioni brevi — :upper, :caps e :firstCap.

Come genero una tabella che cresce con i miei dati?​

Crea una tabella Word, apri <<foreach [item in collection]>> nella prima cella, metti un campo di unione in ogni cella restante e chiudi con <</foreach>> nell'ultima cella. Ogni elemento della raccolta diventa automaticamente una riga.


Risoluzione dei problemi​

Un campo viene stampato come testo letterale invece di un valore
Il nome del campo non corrisponde ai dati, oppure non è racchiuso correttamente. Controlla ortografia e maiuscole/minuscole e assicurati che sia <<[FieldName]>> con entrambe le coppie di parentesi.
Un'immagine non compare
Il campo immagine deve trovarsi dentro una Casella di testo di Word, e una sorgente via URL deve essere pubblicamente raggiungibile. Sposta il campo <<image ...>> in una casella di testo e riesegui.
Una data o un numero appare nello stile sbagliato
La stringa di formato è errata, oppure il valore è arrivato con il tipo sbagliato. Verifica il pattern tra virgolette, ad esempio "dd.MM.yyyy" per le date o "F2" per i numeri.
Una tabella ripete le righe sbagliate o si rompe
Il <<foreach>> deve aprirsi nella prima cella della riga e chiudersi nell'ultima. Se si apre e si chiude nella stessa cella, la riga non si espande.

Passaggi successivi​

Progetta il modello una volta, collegalo ai tuoi dati e PDF4me sforna fatture, contratti e report personalizzati su richiesta — da una singola chiamata API o da un'automazione che ne elabora migliaia alla volta.

Riferimenti​