Guida al prodotto e alle API

Generatore di dati tabellari

Apri il generatore

Seleziona una tabella nell'area di lavoro. Nella scheda Dati dell'Inspector scegli Apri Generatore dati. Le schede Campi, Origine e Anteprima separano la struttura della tabella dai dati.

Colonne e righe di riepilogo

In Campi aggiungi colonne e imposta ogni intestazione e campo dati. Regola larghezza, formato e aspetto avanzato secondo necessità. Sotto la tabella puoi aggiungere righe di totale, subtotale o note; la sezione Totali spiega i calcoli.

Totali

In una riga di totale o subtotale scegli un Calcolo: Somma, Media, Minimo, Massimo o Conta righe. Il risultato viene scritto nella colonna del valore e calcolato da tutte le righe di quella colonna; usa il formato della colonna salvo un formato specifico della riga.

JSON
"summaryRows": [
  { "type": "total", "label": "Totale complessivo",
    "aggregate": "sum", "targetColumnKey": "total" }
]

Contano solo le celle ricevute come numeri: quelle vuote vengono saltate e un importo inviato come testo (“1,250.00”) lascia vuoto il risultato. Anche un subtotale copre tutte le righe, non ogni pagina. Scegliendo Campo dati, la casella Valore legge dalla radice dei dati, non dalla tabella: ad esempio {{ grandTotal }}.

Origine e JSON di esempio

In Origine scegli l'array dati della tabella e modifica il JSON di esempio. Il campo di una colonna deve corrispondere a una proprietà degli oggetti in quell'array. Per mostrare quantity da items, imposta il campo della colonna su quantity. Risolvi gli avvisi JSON prima di continuare.

Aspetto predefinito della tabella

Voce Quantità Totale
Diagnosi del guasto21.700,00
Modulo di connettività12.850,00
Calibrazione in loco1850,00

Le misure sono quelle predefinite: intestazione 40px, riga 40px, spaziatura celle 10px, bordo 1px. Un modello può sovrascriverle tutte.

Un elemento tabella, dall'inizio alla fine

Una tabella si associa a un array nei dati e disegna una riga per ogni elemento. L'elemento seguente è quello incluso nel modello Fattura; la chiamata sottostante fornisce tre righe alla stessa tabella.

JSON
{
  "id": "invoice-items",
  "type": "table",
  "placementMode": "flow",
  "binding": "lineItems",
  "layout": { "x": 0, "y": 330, "width": 100, "widthUnit": "percent", "height": 220 },
  "style": {
    "tableHeaderHeight": 36,
    "tableRowHeight": 34,
    "tableRepeatHeader": true,
    "tablePreventRowSplit": true
  },
  "columns": [
    { "key": "name", "label": "Descrizione", "valueTemplate": "{{ name }}",
      "align": "left", "widthPercent": 46 },
    { "key": "quantity", "label": "Quantità", "valueTemplate": "{{ quantity }}",
      "align": "right", "widthPercent": 14 },
    { "key": "unitPrice", "label": "Prezzo unitario", "valueTemplate": "{{ unitPrice }}",
      "align": "right", "widthPercent": 20,
      "format": { "kind": "currency", "currency": "USD", "decimals": 2 } },
    { "key": "total", "label": "Importo", "valueTemplate": "{{ total }}",
      "align": "right", "widthPercent": 20,
      "format": { "kind": "currency", "currency": "USD", "decimals": 2 } }
  ]
}
cURL
curl -X POST https://api.pdfgine.com/api/v1/render \
  -H "X-PDFgine-Key: $PDFGINE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "templateCode": "invoice",
        "format": "pdf",
        "locale": "it",
        "data": {
          "document": { "title": "Riepilogo fattura" },
          "referenceNo": "DOC-2026-0042",
          "issueDate": "2026-09-06",
          "currency": "USD",
          "customer": "Northwind Trading Ltd.",
          "lineItems": [
            { "name": "Diagnosi del guasto", "quantity": 2, "unitPrice": 850.00 },
            { "name": "Modulo di connettività", "quantity": 1, "unitPrice": 2850.00 },
            { "name": "Calibrazione in loco", "quantity": 1, "unitPrice": 850.00 }
          ]
        }
      }'

binding indica l'array nei dati, key il campo in ogni elemento e valueTemplate ciò che viene stampato. tableRepeatHeader ripete l'intestazione su ogni pagina e tablePreventRowSplit impedisce che una riga venga divisa a un'interruzione di pagina.

Applicare e provare tabelle lunghe

Controlla ordine delle colonne, campi vuoti e riepiloghi in Anteprima, poi applica le modifiche alla tabella. Prova quindi zero, una e molte righe nell'anteprima del documento. Testi lunghi, altezza dell'intestazione e delle righe influenzano la paginazione: non affidarti solo a un esempio breve.

Grafici e report →

Elementi dataset

Un elemento dataset rappresenta la raccolta associata come tabella e ricava le colonne dai dati, senza dichiararle. Usalo quando la struttura della raccolta dipende dal payload anziché dal modello.

Valore associato Cosa mostra il documento
[{ "name": "…", "quantity": 2 }] Una colonna per campo, nell'ordine di prima comparsa. Se una riga omette un campo, la colonna resta comunque.
[{ "party": { "name": "…" } }] Gli oggetti annidati vengono appiattiti in colonne con punti, come party.name, fino a tre livelli. Un array in una riga resta in una sola cella.
["urgent", "warranty"] Una colonna le cui celle sono i valori stessi; l'intestazione è l'ultimo segmento dell'associazione.
{ "status": "released" } Una sola riga, una colonna per campo dell'oggetto.
[] Non viene disegnato nulla. Anche un elemento dataset senza associazione non disegna nulla.

Le intestazioni delle colonne sono i nomi dei campi. Un elemento dataset non ha etichette proprie: usa un elemento tabella se vuoi nominare le colonne.

Gli errori più comuni

  • Un'associazione che indica un array assente nei dati disegna una tabella vuota, senza errore. Se la tabella è vuota, confronta l'associazione con la chiave nella richiesta.
  • La chiave di una colonna è una proprietà degli oggetti nell'array. Una chiave scritta male svuota una sola colonna, mentre il resto della tabella sembra corretto.
  • Importi e quantità devono arrivare come numeri. Una stringa salta il formattatore, quindi la colonna perde l'allineamento e il separatore delle migliaia.
  • Una tabella lunga attraversa più pagine. Senza tableRepeatHeader la seconda pagina inizia senza intestazione; senza tablePreventRowSplit una riga può essere divisa.
  • Prova zero, una e molte righe. Una tabella che ha visto solo tre righe nasconde sia il caso vuoto sia le interruzioni di pagina.