Stampa in PDF
Salve,
qualche tempo fa postai una richiesta similare, adesso mi serve un chiarimento.
A suo tempo mi consigliaste entity print ed un similare per la views.
Ho usato un po' entity print per capirlo ma non mi sembra poterne avere un pieno controllo, in quanto stampa il nodo o la views e poi con i css o js lo devo adattare.
Facendo una ricerca ho trovato la libreia jsPDF.
Per quel che ho capito, con questa libreria posso stampare il contenuto di un div o altro tag oppure aggiungere scritte.
Siccome le stampe che devo produrre saranno complesse il mio dubbio è
Riempio un div con tutta la pagina che mi creo a mano e poi con jsPDF stampo ?
Oppure c'è qualche altro metodo ?
Sto uscendo pazzo perchè non ho ancora capito la logica appieno
Grazie
Gaetano
Risposte
Ciao, probabilmente se
Ciao, probabilmente se intendi utilizzare una libreria di terze parti ti conviene postare le richieste ad esempio su github, immagino sia https://github.com/parallax/jsPDF il progetto a cui ti riferisci. Credo che li riusciresti ad ottenere il miglior supporto.
Produrre un pdf dall'html (come entity_print) è molto più semplice che farlo da codice posizionando i singoli elementi, avrai delle limitazioni su stili ed elementi e in generale performance inferiori (ad esempio se devi generare un gran numero di documenti) ma impiegherai meno tempo con risultati comunque molto buoni anche per layout complessi.
In alcuni casi potresti optare per
https://www.drupal.org/project/fillpdf
se hai documenti pdf editabili complessi, questo modulo ti permette di "riempirli" prendendo i valori da una o più entità, senza generarli da zero.
Ti ringrazio per il
Ti ringrazio per il lavoraccio che hai fatto. Hai risposto a tutte le mi domande e ti sono grato.
Ho fatto un po' di esperienza con entity print ma mi sono arenato sulla personalizzazione del file twig. Ho copiato e rinominato il file dalla cartella template e per provare se funzionasse ho aggiunto una riga e funziona.
La cosa che non sono riuscito a fare é stato posizionare i singoli campi.
Ho richiamato il singolo campo così
ma non me lo stampa
Provo a postare domande su gitHub
e provo anche fillpdf
Sicuramente mi manca l'esperienza per capire che sul web le stampe si fanno in maniera diversa.
Ancora non ho capito se per fare la maschera dei filtri (in alcune stampe anche 8-9) conviene creare un controller/form come modulo personalizzato.
Nella view penso sarebbe brutto da vedere tutti quei filtri esposti
Prova con {{ content }} al
Prova con
{{ content }}
al posto di node
Ho provato varie possibilità
Ho provato varie possibilità ma senza successo
Ma senza successo.
Alla fine ho pensato di non esser tanto esperto e di sbagliare qualcosa
Io ho ad
Io ho ad esempio:
node--contratto--pdf.html.twig
il nome del tipo di nodo è contratto per cui ho attivato il relativo view mode "PDF" e configurato presso:
/admin/structure/types/manage/contratto/display/pdf
poi nel template di cui sopra ho ad esempio:
{{ content.field_info_addizionali }}
se il campo viene valorizzato da interfaccia, nella stampa compare.
ok provo Grazie di tutto
ok
provo
Grazie di tutto
Ciao Maurizio, ho creato
Ciao Maurizio,
ho creato un'installazione locale con xampp aggiornato all'ultima versione di php.
Tieni presente che non ho creato un SubTheme
Ho creato un nuovo contenuto chiamato prove_varie, ho attivato il view 'PDF' e ordinato i campi
Il pdf lo stampa
Per personalizzare la stampa
Ho copiato il file entity-print.html.twig (dalla cartella ..\web\modules\contrib\entity_print\templates
in
node--prove-varie--pdf.html.twig (nella cartella ..\web\core\themes\olivero\templates)
Ho provato la stampa e mi stampa sia label che campi, ma non il titolo
Ho notato che il "content." stampa sia label che valore
mentre
"node." stampa la label o il valore a seconda se .label o .value
Se ho ben capito per fare una stampa personalizzata devo usare abbastanza i css, per poter stampare in orizzontale più campi, fare riquadri o raggruppare i campi
Oppure c'è qualche altra possibilità ?
Ottimo, per il titolo prova
Ottimo, per il titolo prova {{ label }} mentre per la formattazione entity print usa l'html, quindi i tag e gli stili sono gli strumenti a tua disposizione. Le varie librerie per la generazione del pdf supportano poi alcuni tag aggiuntivi, ad esempio per i numeri pagina, gli header e i footer. Per questo però devi fare riferimento alla documentazione della libreria (ad esempio dompdf o similare) e soprattutto fare prove sul campo.
Ciao Maurizio, si l'ho
Ciao Maurizio, si l'ho provato e non mi ritorna nulla, in particolare nel codice del titolo questa riga
<title>{{ title }}</title>
che invece funziona se non uso la personalizzazione
Ho poi provato nel body questa che tu mi hai indicato
{# Stampa il Titolo del Nodo#}
{{ node.label }}
{{ label }}
ma nulla da fare.
In queste situazioni come posso risolvere la questione ?
Faccio una rucerca su dompdf
Grazie
Credo che sul sito di
Credo che sul sito di supporto a dompdf puoi trovare info su tag e stili supportati non tanto come generare l'html dalla piattaforma che usi.
In generale prova a utilizzare:
https://www.drupal.org/project/twig_vardumper
in modo da avere un'idea delle variabili a disposizione nel template su cui lavori e poter fare un debug più approfondito.
Maurizio mi puoi aiutare a
Maurizio mi puoi aiutare a trovare un link dove posso trovare i vari comandi da poter utilizzare con domPdf ?
Ho trovato il progetto su gitHub ma non ho capito come fare per mettere un'intestazione un titolo o altro all'interno del file Twig
Come riportato dalla pagina
Come riportato dalla pagina su github del progetto i riferimenti principali sono:
https://github.com/dompdf/dompdf/wiki
https://github.com/dompdf/dompdf/discussions
https://stackoverflow.com/questions/tagged/dompdf
Grazie li studierò
Grazie li studierò
Scusa se ne approfitto. C'è
Scusa se ne approfitto. C'è un modo anche in twig per non svuotare la cahe ogni volta ?
Nella fase iniziale devo farie varie prove
Puoi impostare opportunamente
Puoi impostare opportunamente alcuni servizi per evitare il caching durante lo sviluppo, vedi:
https://www.drupal.org/node/2598914
Grazie da capire per bene
Grazie
da capire per bene
Credo che sul sito di
Ciao Maurizio, ho installato il modulo ed attivato il debug di twig nel file service.yml
Ho visto che posso usare sia
{{ kint() }}
che
{{ dump() }} mi ritorna un errore
Error generating document: Failed to generate PDF: 'text_overflow' is not a recognized CSS property., 'box_sizing' is not a recognized CSS property., 'pointer_events' is not a recognized CSS property., 'user_select' is not a recognized CSS property.
Con kint ci mette tanto tempo per caricare l'array ed all fine mi riporta un errore.
Ho anche provato con
{{ kint(content) }}
ma sempre la stessa cosa
Prova le seguenti cose, in
Prova le seguenti cose, in generale è normale quello che riscontri: usa dump() e vardumper() sempre con variabili e mai senza argomenti se possibile in modo preciso per limitare l'output es dump(content.field_body), aumenta la memoria php memory_limit, evita kint che richiede molte più risorse.
Ok scusa Maurizio prima di
Ok scusa Maurizio prima di leggere questo msg avevo aggiornato il precedente msg.
Memory limit l'ho settato a -1
Ho provato ocn
dump(content.field_anagrafica)
e mi ritorna a parte una serie di erori, tra cui un bartik_sub che come sotto tema ho in un'altra cartella e non capisco come possa leggere quell'informazione, il seguente errore, senza stampare il pdf.
Probsbilmente salto qualche passaggio
Error generating document: Failed to generate PDF: 'text_overflow' is not a recognized CSS property., 'box_sizing' is not a recognized CSS property., 'pointer_events' is not a recognized CSS property., 'user_select' is not a recognized CSS property.
Prova ad escludere dal css
Prova ad escludere dal css che usi le proprietà segnalate che la libreria per la generazione del pdf non supporta.
Nota che se usi le funzioni di debug nel template usato per generare il pdf si potrebbe bloccare il normale flusso di esecuzione, impedendo la creazione del documento.
Puoi utilizzare la funzionalità di debug di entity_print aggiungendo /debug in fondo alla url es:
/print/pdf/node/41776/debug
in questo modo il template verrà stampato a schermo senza generare il pdf.
Ciao Maurizio, che stupido,
Ciao Maurizio, che stupido, avevo già usato /debug prima di attivare il debug e mi riportava unicamente il file che avrebbe stampato.
La cancellazione dei CSS non posso farlo, non ne ho e non ho nemmeneno bartik_sub che mi riporta come errore.
Dopo il debug, invece riesco a vedere i campi attraverso il context o dump(). Adesso da capire bene come utilizzarlo.
Scusa se ti pongo un'altra domanda. Ho attivitato entity_print anche per la view.
Qui mi trovo in difficioltà in quanto non ho capito qual'é il file di template da duplicare.
Ho aperto la sorgente della pagina dove viene visualizzata la view e tra i vari file twig, nella carella templates\views trovo 2 file che penso possano andare bene per la personalizzazione e sono
views-view.html.twig
views-view-table.html.twig
che duplico e rinomino in
views-view--prove-varie--page_1.pdf.html.twig
views-view-table--prove-varie--page_1.pdf.html.twig
Inserisco il dump prima del div, ma non ottengo risultati
{{ dump() }}
<div{{ attributes.addClass(classes) }}>
Ho provato i 2 files rinominati sia in templates che templates\view ma nulla
Attivando il debug twig
Attivando il debug twig attraverso il file services.yml (già visto in altro post) puoi ottenere i suggerimenti dei template osservando il codice sorgente della pagina (solitamente tasto destro mouse sulla pagina + "Visualizza sorgente pagina").
Consulta questo:
https://www.drupal.org/node/2358785
Ciao Maurizio, l'articolo
Ciao Maurizio, l'articolo l'avevo letto ed avveo individuato i 2 files twig che m sembravano potessero andar bene
Ti posto il codice del file twig che se ho capito bene va utilizzato.
Ho rinominato nella cartella template/view il file
views-view-table.html.twig
in
views-view-table--prove-varie-page_1--pdf.html.twig
In questo file prima del <table... ho inserito {{ dump() }}
Ma sembra non leggere questo file
Non ho capito se sbaglio io a rinominare il f ile
<!-- THEME DEBUG -->
<!-- THEME HOOK: 'views_view_table' -->
<!-- BEGIN OUTPUT from 'core/themes/olivero/templates/views/views-view-table.html.twig' -->
<table class="views-table cols-3">
<thead>
<tr>
<th id="view-title-table-column" class="views-field views-field-title" scope="col">Titolo</th>
<th id="view-field-anagrafica-table-column" class="views-field views-field-field-anagrafica" scope="col">Anagrafica</th>
<th id="view-field-km-table-column" class="views-field views-field-field-km" scope="col">Km</th>
</tr>
</thead>
<tbody>
<tr>
<td headers="view-title-table-column" class="views-field views-field-title">
<!-- THEME DEBUG -->
<!-- THEME HOOK: 'views_view_field' -->
<!-- BEGIN OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
<a href="/pe-so/web/node/2" hreflang="it">Titolo Prova 2</a>
<!-- END OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
</td>
<td headers="view-field-anagrafica-table-column" class="views-field views-field-field-anagrafica">
<!-- THEME DEBUG -->
<!-- THEME HOOK: 'views_view_field' -->
<!-- BEGIN OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
Sei TU
<!-- END OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
</td>
<td headers="view-field-km-table-column" class="views-field views-field-field-km">
<!-- THEME DEBUG -->
<!-- THEME HOOK: 'views_view_field' -->
<!-- BEGIN OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
35
<!-- END OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
</td>
</tr>
<tr>
<td headers="view-title-table-column" class="views-field views-field-title">
<!-- THEME DEBUG -->
<!-- THEME HOOK: 'views_view_field' -->
<!-- BEGIN OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
<a href="/pe-so/web/node/1" hreflang="it">Titolo Prova 1</a>
<!-- END OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
</td>
<td headers="view-field-anagrafica-table-column" class="views-field views-field-field-anagrafica">
<!-- THEME DEBUG -->
<!-- THEME HOOK: 'views_view_field' -->
<!-- BEGIN OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
Sono io
<!-- END OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
</td>
<td headers="view-field-km-table-column" class="views-field views-field-field-km">
<!-- THEME DEBUG -->
<!-- THEME HOOK: 'views_view_field' -->
<!-- BEGIN OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
10
<!-- END OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
</td>
</tr>
</tbody>
</table>
<!-- END OUTPUT from 'core/themes/olivero/templates/views/views-view-table.html.twig' -->
Credo il nome del file del
Credo il nome del file del template non sia corretto, prova ad es:
views-view-table--prove-varie.html.twig
Ho capito l'errore. Per
Ho capito l'errore.
Per similitudine col nodo mettevo ".PDF", invece devo copiare il file twig della view personalizzandolo col nome della vista e su questo effettuare le personalizzazioni.
Adesso devo Capire come interagire. Sono riuscito a far visualizzare delle scritte prima e dopo la table ma non tra le righe.
Grazie