Salta ai contenuti

NextPDF — panoramica di Gotenberg

NextPDF Gotenberg è un bridge leggero tra NextPDF e un servizio Gotenberg esterno. Riceve un documento Office che NextPDF non è in grado di renderizzare nativamente, lo invia a un’istanza Gotenberg via HTTP, ottiene in risposta un PDF e lo consegna all’applicazione. Da lì, le altre funzionalità di NextPDF si occupano del post-processing.

Il pacchetto è compatto ed esplicito. Non incorpora un motore di rendering, non avvia LibreOffice e non esegue un browser. Ogni conversione consiste in una singola richiesta HTTP multipart verso un endpoint Gotenberg. L’endpoint deve essere gestito separatamente e il bridge va indirizzato a quell’endpoint tramite la configurazione.

Usare questo bridge quando si dispone di file sorgente .docx, .xlsx, .pptx, .odt, .ods o .odp e si vuole ottenerli come PDF all’interno di un flusso NextPDF. Una volta generato il PDF, tutto il resto — firma, conversione PDF/A, filigrana, unione — passa attraverso NextPDF stesso o il pacchetto nextpdf/premium.

Il bridge ha una dipendenza di runtime che non è un pacchetto PHP: un servizio Gotenberg in esecuzione che il bridge può raggiungere via HTTPS.

  • Il bridge non installa, gestisce o supervisiona Gotenberg. Gotenberg va distribuito separatamente (il progetto upstream pubblica un’immagine container) ed è necessario gestirne disponibilità, capacità ed esposizione di rete.
  • Il bridge comunica con la route di conversione LibreOffice di Gotenberg. L’URL della richiesta viene costruito come <apiUrl>/forms/libreoffice/convert, dove <apiUrl> è l’URL di base che configuri. Questa route fornisce al bridge il suo insieme di formati supportati.
  • La sonda di integrità interroga <apiUrl>/health con una richiesta HTTP HEAD e considera disponibile qualsiasi stato inferiore a 500.

La conversione avviene in un servizio gestito da chi integra il bridge, quindi il comportamento del bridge dipende dalla versione di Gotenberg in esecuzione. Il bridge invia una struttura di richiesta multipart fissa, e il percorso della route (/forms/libreoffice/convert) e il percorso di integrità (/health) sono il solo contratto lato Gotenberg su cui fa affidamento. Consultare /integrations/gotenberg/install/ per la baseline di distribuzione e /integrations/gotenberg/security-and-operations/ per l’hardening del servizio.

Il bridge converte esattamente i formati enumerati nel suo tipo OfficeFormat. Ogni formato viene rilevato dall’estensione del file (senza distinzione tra maiuscole e minuscole, ed è accettato anche un punto iniziale). Ogni formato viene quindi inviato a Gotenberg con un tipo MIME fisso:

FormatoEstensioneTipo MIME inviato a Gotenberg
Word (OOXML)docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
Excel (OOXML)xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
PowerPoint (OOXML)pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
OpenDocument Textodtapplication/vnd.oasis.opendocument.text
OpenDocument Spreadsheetodsapplication/vnd.oasis.opendocument.spreadsheet
OpenDocument Presentationodpapplication/vnd.oasis.opendocument.presentation

Questo è l’elenco completo. Un’estensione al di fuori di questo insieme solleva un ValueError prima di qualsiasi richiesta di rete, così il bridge non tenta mai una conversione che non sia in grado di descrivere. Il bridge non dichiara di supportare “qualsiasi file Office” o “tutti i formati di documento”. Supporta i sei formati indicati sopra, perché sono i sei che il codice riconosce e i sei che la suite di test esercita.

I formati binari legacy (.doc, .xls, .ppt), il rich text (.rtf), il testo semplice, il CSV e i formati immagine non fanno parte dell’insieme riconosciuto dal bridge. La route LibreOffice di Gotenberg potrebbe, di per sé, accettare una gamma più ampia di input. Il bridge si limita deliberatamente all’insieme enumerato, in modo che il rilevamento del formato, il tipo MIME e i metadati del risultato siano sempre coerenti e verificabili.

Una conversione segue un flusso lineare in un unico passaggio. La convalida avviene a ogni passo prima che qualsiasi byte lasci il processo:

  1. La configurazione viene verificata. Un URL API vuoto fallisce subito con un’eccezione di conversione.
  2. L’URL API viene convalidato: è richiesto HTTPS e l’host viene risolto e filtrato in modo che non possa puntare a un indirizzo privato o riservato. L’insieme di indirizzi risolti viene catturato per il pinning successivo.
  3. L’input viene letto (per le conversioni di file, il percorso viene prima canonicalizzato per bloccare il traversal) e la sua estensione viene mappata su un OfficeFormat.
  4. La lunghezza in byte viene verificata rispetto al limite massimo configurato, e il nome del file viene filtrato per rilevare sequenze di traversal, slash, byte null e caratteri di controllo.
  5. L’insieme di indirizzi viene ricontrollato immediatamente prima della richiesta, per chiudere la finestra tra convalida e connessione.
  6. Un corpo multipart/form-data viene costruito e inviato in POST alla route LibreOffice, con un bearer token se ne è configurato uno.
  7. La risposta viene analizzata: lo stato deve essere 200, il Content-Type deve contenere application/pdf e il corpo deve iniziare con la firma %PDF. Solo a quel punto viene restituito un risultato.

Qualsiasi errore nei passi 1–7 solleva un’eccezione tipizzata anziché restituire un risultato parziale o non verificato. Le eccezioni esatte e le relative cause sono catalogate in /integrations/gotenberg/troubleshooting/.

Una conversione riuscita restituisce un oggetto risultato. L’oggetto contiene i byte PDF grezzi, il formato di origine convertito e una misurazione facoltativa del tempo di rendering, ed espone un controllo di validità (un corpo non vuoto che inizia con %PDF) insieme a un accessor per la dimensione in byte. I byte sono un normale flusso PDF, quindi possono essere scritti su disco, inviati in streaming a un client o passati a un documento NextPDF per un’ulteriore elaborazione.

Il bridge converte e convalida. Non:

  • Firma, cifra, linearizza o converte in PDF/A l’output. Sono attività di post-processing gestite dal core di NextPDF o da nextpdf/premium.
  • Ritenta le richieste fallite, accoda il lavoro o memorizza i risultati in cache. Sono aspetti a livello di applicazione. /integrations/gotenberg/production-usage/ mostra dove aggiungerli attorno al bridge.
  • Gestisce il ciclo di vita del servizio Gotenberg. La distribuzione e le operazioni sono trattate in /integrations/gotenberg/security-and-operations/.

Il core OSS può scrivere il PDF convertito così com’è. Se occorre firmare il documento convertito, produrre un profilo di archiviazione PDF/A o applicare una filigrana, il pacchetto nextpdf/premium aggiunge queste capacità. Il bridge in sé è neutrale rispetto all’edizione: produce un PDF. L’uso che se ne fa determina se serve un’edizione commerciale.

La baseline PAdES disponibile nell’edizione Pro è solo B-B. I profili di convalida a lungo termine (B-T, B-LT, B-LTA) non fanno parte dell’edizione Pro e non sono forniti da questo bridge. Non dedurre capacità di marca temporale o LTV dalla presenza di questo pacchetto.

  • /integrations/gotenberg/install/ — installa il pacchetto e predispone una baseline Gotenberg.
  • /integrations/gotenberg/configuration/ — ogni opzione di configurazione, il suo tipo, il valore predefinito e l’effetto.
  • /integrations/gotenberg/quickstart/ — una prima conversione eseguibile.
  • /integrations/gotenberg/production-usage/ — il cablaggio del bridge in un’applicazione reale.
  • /integrations/gotenberg/troubleshooting/ — il catalogo delle eccezioni e il significato di ciascuna.
  • /integrations/gotenberg/security-and-operations/ — il modello di sicurezza e come gestire in sicurezza il servizio dipendente.
  • /integrations/gotenberg/boot-and-discovery/ — come i framework host scoprono e cablano il bridge.
  • /integrations/gotenberg/integration/ — guidare il rendering di NextPDF attraverso il servizio.