Newsgroup: it.comp.www.php
Titolo: Generazione PDF

Ciao a tutti,
Avrei la necessità di gestire la generazione dinamica di cataloghi PDF
particolarmente complessi ed articolati (per intenderci si tratta di
cataloghi di un ricambista in ambito automotive, ~300 pag di tabelle
fitte di dati e non uniformi, corredata di immagini e fronzoli vari).
 
Voi che libreria scegliereste se doveste partire da 0?
 
Grazie
-- 
g4b0, linux user n. 369000
http://brosulo.net
 

 
 
Dipende cosa hai come input - tcpdf fa il suo porco lavoro a partire da HTML
formattato come richiede.
 
Ciao!


In realtà i dati sono un'estrazione ad-hoc da DB, il problema dell'HTML
è che dobbiamo gestire salti pagina customizzati, scritte in verticale
nei margini a bordo pagina, numerazione pagine ecc.
 
Ma tcpdf mi gestisce per esempio bootstrap o CSS3 in generale?
 
Questi PDF andranno stampati e rilegati, per cui probabilmente sarebbe
meglio lavorare direttamente sul PDF, senza passare da HTML. Per contro
una delle specifiche è la gestione "fluida" dei contenuti, per cui se
c'è spazio per un box va messo nella pagina precendete anzichè finire
"d'ufficio" in quella successiva, pertanto in queso caso HTML aiuterebbe.



HTML e CSS hanno fatto salti da giganti anche nella gestione tipografica, ti consiglio di dare un'occhiata e non scartarlo a priori.
 
https://www.smashingmagazine.com/2015/01/designing-for-print-with-css/
 


tcpdf la puoi usare chiamando primitiva per primitiva, cose come "metti
riga di testo lì", "metti immagine ruotata", "quanto spazio c'è ancora sulla
pagina?" etc.etc.
Solitamente si passa da HTML (scordati non solo bootstrap, ma proprio il css,
vai di <center>, <font color> e roba simile :) ) perché scrivere un PDF a
forza di primitive è un lavorone che quasi nessuno ha voglia di fare, ma se
serve certamente lo puoi.
 
Ciao!

 HTML e CSS hanno fatto salti da giganti anche nella gestione tipografica, ti consiglio di dare un'occhiata e non scartarlo a priori.
 
Ho dato un occhiata, ma nel nostro caso il PDF dovrà avere la precisione
"al pixel", pertanto non mi fido ancora di HTML/CSS. Non vorrei
ritrovarmi a sviluppo ultimato a non riuscire a fare la modifica killer
richiesta dal cliente...


 serve certamente lo puoi.
 
Ok, quindi anche tcpdf può prendere in input dell'HTML? Io sarei
comunque propenso a lavorare di primitive, per questo progetto in
particolare vorrei avere controllo totale e "senza scherzi"



Lavorando con le primitive non hai il controllo sulle sovrapposizioni e quando il cliente vorrà cambiare un aspetto per lui insignificante non troverai nessun css ad aiutarti, dovrai ripartire da capo, anche per l'aumento di 2pt del font. Però è anche vero che se l'html ti vuole deprimere ti deprime, specie i non grafici.
Buon lavoro.

 Buon lavoro.
 
Giusto per capirci, secondo te una cosa del genere è fattibile con
HTML+CSS -> PDF?
 
http://goo.gl/tlQMBL
 



Mi ero già fatto questa ricerca non molto tempo 
fa ed ero giunto a questa conclusione, 
ma per risponderti devo farti una domanda: 
questa generazione di cataloghi quante volte avviene?
 
A. poche volte al giorno/mese? 
 
B. di continuo, ogni utente definisce come deve essere il suo 
catalogo e questo avviene 15.000 volte al giorno.
 
Risposte:
 
A. SI, la creazione dell'html via php, riutilizzabile nel sito, 
ma per il pdf dovrai cercare strumenti diversi dalle librerie php, 
userai programmi concatenati in maniera automatizzata. 
Ad esempio 
http://wkhtmltopdf.org
 
 
B. SI, il server produrrà tutti i 15.000 cataloghi al giorno 
(altrimenti sarebbe bastato un grafico) ma ha un costo di licenza.
http://www.princexml.com
 (che è in java ma si interfaccia col php)
 
 
Per mia esperienza diretta, anni fa quando dovetti produrre i pdf
via php scelsi di lavorare direttamente con le primitive perché
le librerie html>pdf all'epoca disponibili non mi parevano all'altezza.
 
Se anche tu prenderai questa via ti consiglio caldamente di crearti delle
classi che ti permettano di impaginare con la filosofia di
FileMaker/Access, cioè a sezioni e colonne, in modo che tu 
definisci solo piccoli modelli e sia la classe a riproporli alle
diverse coordinate. Io feci così e mi trovai bene.
 
Lo spirito del mio precedente post era che vista la 
maturità di html anche per la stampa,
di trovare una terza via che saltasse il pdf.
Rimanere in html, magari come app cordova,  ebook...
 

 
 
La vedo dura, ma la vedo dura anche a primitive. :)
 
Comunque non è un aut-aut, puoi anche sgrossare in HTML e piazzare a mano
quello che in HTML non puoi fare.
 
Ciao!

 Rimanere in html, magari come app cordova,  ebook...
 
La terza via non è percorribile, il cliente vuole un PDF perchè deve
stamparlo e distribuirlo, il target sono i vari distributori sparsi per
il mondo. Ti immagini il meccanico che sceglie il ricambio con un app su
un tablet?


 quello che in HTML non puoi fare.
 
Ci avevo anche pensato, ma il problema è che la base dati cambia in
continuazione, per cui quelle tabelle avranno dimensioni diverse di
giorno in giorno. Secondo te con una libreria tipo tcpdf riesco ad
importare dell'html e poi capire, per esempio, dove finisce una tabella?
 
Anche il numero di pagine è variabile, le immagini che oggi non ci sono
domani potrebbero essere inserite, e via discorrendo.


 
 
Se hai "qualche mese" a disposizione fai in tempo ad inventare un nuovo
formato alternativo al PDF :D
 
Ti suggerivamo lo HTML perché di solito vuoi finire in giornata: se non hai
questo tipo di restrizioni vai tranquillo di placeText/placeImage/drawTable
(funzioni di fantasia) di qualsiasi libreria più ti piaccia, che farai
sicuramente in tempo (io avevo suggerito tcpdf perché da quello che ho visto
è la migliore sulla funzione HTML->PDF, ma visto che non ti serve puoi
sceglierne qualsiasi altra).
 
Ciao!

 formato alternativo al PDF :D
 
Be, c'è da dire che "qualche mese" comprende il refactoring della base
dati, lo studio di un nuovo layout, la generazione del PDF e tutte le
verifiche necessarie alla messa in stampa (si tratta di stampare ~10K
copie in prima battuta).
 
Ho provato tcpdf e non sembra male, ora vorrei dare un'occhiata alla
libpdf, poi credo che sceglierò tra queste due. E magari provo
l'approccio ibrido: HTML in prima battuta e primitive per rifinire.
Staremo a vedere :)


 un tablet?
 
Tutti i giorni stampa e distribuisce il cartaceo a millemila meccanici? E comunque i meccanici hanno sia il computer che internet, per cui il catalogo html diventa più pratico perché aggiornato e con strumenti che il cartaceo non può avere. Ovviamente non è per insistere, sicuramente il pdf è l'unica soluzione.

 Tutti i giorni stampa e distribuisce il cartaceo a millemila meccanici?
 
No, lo stampa quando le scorte si esauriscono, nel frattempo online c'è
la versione sempre aggiornata. Per la questione catalogo online/cartaceo
sono daccordo con te, ma purtroppo il mondo vuole ancora il cartaceo
(soprattutto in posti come india, africa e sudamerica, ma anche l'italia
non scherza)
 
 
P.S.
Non centra nulla, ma faccio fatica a quotare decentemente i tuoi post
inviati tramite google groups (vedi l'ultimo quote troncato)


 inviati tramite google groups (vedi l'ultimo quote troncato) 
 
Ho notato ma non saprei come fare.

 di codice. Se ci riuscite davvero in tre mesi avete tutta la mia stima.
 
Beh, i tre mesi sono per la generazione del PDF, previa normalizzazione
della base dati. Tutta la gestione del dato, con relativi import/export
da competitor e fornitori, connessioni con webservice del mondo
automotive, allienamento con amazon, e tante altre amenità sono escluse
dal conteggio.
 
Si tratta di un intervento mastodontico che credo mi darà filo da
torcere per almeno un anno, ma forse anche qualcosa di più.



Uso anch'io google groups, bisogna sistemare tutto il quoting a mano,
che in automatico non ce la fa (e, in tutti questi anni, non ce l'ha mai
fatta), così come mettere a mano i ritorni a capo.
Da questo punto di vista è veramente scomodo.
 
Ciao!


uso tcpdf per generare fatture, prenotazioni ed elenchi (una decina di 
pagine), vado di ibrido, primitive + html (table).
 
la versione che ho risale a qualche hanno fa, (devo decidere di fare 
l'aggiornamento all'ultima versione)
 
tcpdf non mastica bene i css, li devi mettere inline non possono essere 
un file separato, e poi se sono semplici li gestisce se sono complicati 
(diversi cascade), non me li prende.
 
una cosa che devi da considerare è il "tempo" di generazione del PDF, 
sopratutto nel tuo caso dove generi cataloghi da centinaia di pagine con 
foto, table, ecc..
 
da qualche parte ho letto che tcpdf sia il più veloce, soprattutto con 
immagini, sfondi, trasparenze ecc..
 
Ciao
 
 

 con foto, table, ecc..
 
Ha importanza il tempo? Da quanto ho capito non è mica una operazione 
da fare dietro richiesta HTTP è un lavoro batch.
 
 
-- 
Andrea
 


Esatto, fortunatamente si tratta di un lavoro batch. Sto provando a
smanettare con TCPDF e devo dire che non è male, anche se trovo
scomodissimo il dover chiamare funzioni con 10 o 12 parametri.
 
La mia esigenza è più orientata alla flessibilità che non alle
performance, anche se un prodotto performante non mi farebbe schifo.
 
Mi hanno anche consigliato libPdf [1], che essendo un modulo di PHP
dovrebbe essere più performante, ma dal punto di vista della semplicità
di utilizzo come sarà? Quanto meno esiste una documentazione, che tcpdf
non ha...
 
Qualcuno ha esperienza in merito?
 
 
[1] 
https://www.pdflib.com
 



Io ho smesso e sono tornato a Thunderbird, google groups lo uso solo
quando non sono a casa o in ufficio, ma in quelle situazioni raramente
ho bisogno di usenet. Inoltre sto cercando di abbandonare google in
toto, ma questo è un altro discorso.


Ciao g4bo,
resuscito questo interessante post.
Sarei decisamente curioso di vedere il risultato, e forse non sono nemmeno il solo.


Ciao,
Purtroppo non vi é ancora nulla online. Il progetto PDF é slittato a 
favore di altri interventi, ma prima o poi ci torneró su... Se mi 
ricorderó ancora di questo thread verró a farvi vedere il risultato!


Ci conto