stampare pagina

Ciao

Allora.

Richiamo dei dati dal db che vengono visualizzati e paginati con ordine nelle viarie pagine web.

Vorrei adesso dare la possibilità di stampare (inteso come pagina da inviare alla stampante ;D) i dati

trovati dall'utente. Quindi una volta cliccato su un eventuale bottone di stampa aprire una finestra di pop up (delle dimensione di un foglio A4) dove è stata inviata la query relativa alle preferenze e infine stampare la pagina.

Non dovrebbe essere difficile questo punto visto che l'ho già fatto una volta molto tempo fa; ma ho ora l'esigenza di stampare i dati un tot per pagina.

Ad esempio la prima pagina solo max 10 record incolonnati (in quanto c'è pure l'intestazione) per le successive pagine (numerate) il resto che possono essere 15 o 20 a pagina.

Dovrei fare una sorta di paginazione, ma ho dei dubbi sulla prima pagina.

Potete suggerirmi qualcosa su come impostare la stampa correttamente (magari qualcuno ha già affrontato il problema)?

Grazie

inviato 5 anni fa
frankphp
X 0 X

Credo che questa cosa tu la possa ottenere con difficoltà utilizzando i CSS ed il tuo browser.

Per farlo io creerei un pdf che l'utente poi si arrangerà a stampare. Nel forum ne abbiamo già discusso delle classi a disposizione del php per creare pdf.

Ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Io lo farei in CSS puro, senza nemmeno passare per pdf.

Basta aggiungere un CSS con media="print" nella sezione head della pagina.

In questo modo ottieni il risultato voluto anche se l'utente stampa la pagina autonomamente e quindi puoi anche puntare il link per la stampa a un banale javascript:print()  :)

risposto 5 anni fa
Massimiliano Arione
X 0 X

Io lo farei in CSS puro, senza nemmeno passare per pdf.

Basta aggiungere un CSS con media="print" nella sezione head della pagina.

In questo modo ottieni il risultato voluto anche se l'utente stampa la pagina autonomamente e quindi puoi anche puntare il link per la stampa a un banale javascript:print()  :)

la soluzione mi interessa. Fammi capire bene garak (io non conosco bene i css e quasi niente di javascript).

Io devo passare comunque i dati per la stampa (o direttamente la query risultante): ma cosa significa:

"anche se l'utente stampa la pagina autonomamente ecc".

Non c'è qualcosa preconfezionato che io posso adattare?

Rischio di perderci mooolto tempo visto che ho poco competenze in merito.

Resterebbe poi l'ipotesi del pdf infine che non mi esalta comunque.

Grazie

risposto 5 anni fa
frankphp
X 0 X

Semplicemente è creare un foglio di stile che serve per la stampa della tua pagina.

Non è difficile se già usi i CSS per la grafica del tuo sito web. Basta adattare quel CSS e renderlo "più pulito" in modo da adattare la pagina che si vuole stampare alla stampante appunto.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

la soluzione mi interessa. Fammi capire bene garak (io non conosco bene i css e quasi niente di javascript).

Io devo passare comunque i dati per la stampa (o direttamente la query risultante): ma cosa significa:

"anche se l'utente stampa la pagina autonomamente ecc".

Significa che non devi creare un'altra pagina per la stampa, ma usare la stessa pagina usata per il web.

In quella pagina inserisci il CSS con media print, che verrà applicato automaticamente dal browser quando sarà richiesta la stampa della pagina stessa. Puoi anche andare oltre: se alcuni attributi del CSS "normale" sono inutili o controproducenti per la visualizzazione della stampa, puoi aggiungere a questo CSS media screen, in modo tale che sarà ignorato per la stampa e usato solo per la visualizzazione da browser.

risposto 5 anni fa
Massimiliano Arione
X 0 X

Significa che non devi creare un'altra pagina per la stampa, ma usare la stessa pagina usata per il web.

In quella pagina inserisci il CSS con media print, che verrà applicato automaticamente dal browser quando sarà richiesta la stampa della pagina stessa. Puoi anche andare oltre: se alcuni attributi del CSS "normale" sono inutili o controproducenti per la visualizzazione della stampa, puoi aggiungere a questo CSS media screen, in modo tale che sarà ignorato per la stampa e usato solo per la visualizzazione da browser.

hmmm non penso sia conveniente. Alcuni contenuti non devono essere proprio stampati.

Poi alla pagina che deve essere stampata è stata applicata la paginazione dei dati che quindi non sono visibili tutti nella stessa. Devo inviare la query alla pagina di stampa con oltre il layout specifico anche  senza paginazione..anzi con una paginazione differente visto che devo fare in modo (come?) che i primi 10 vengano stampati nella pagina con le intestazione utente e il resto 15  per pagina.

Grazie

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

Per questa ragione suggerivo il pdf...

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Con TCPDF, utilizzando le funzioni HTML, ci si riesce abbastanza facilmente.

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

hmmm non penso sia conveniente. Alcuni contenuti non devono essere proprio stampati.

Poi alla pagina che deve essere stampata è stata applicata la paginazione dei dati che quindi non sono visibili tutti nella stessa. Devo inviare la query alla pagina di stampa con oltre il layout specifico anche  senza paginazione..anzi con una paginazione differente visto che devo fare in modo (come?) che i primi 10 vengano stampati nella pagina con le intestazione utente e il resto 15  per pagina.

Forse non hai chiaro come funzionano i fogli di stile: quando viene richiesta la stampa, la pagina non viene caricata un'altra volta, semplicemente viene applicato il css con media print e disapplicati eventuali css con media diversi.

Tra l'altro, questo ti consente di evitare di reimplementare una logica diversa per la stampa, perché sarà esattamente quella della visualizzazione con browser: nella pagina 1 si stampano le righe della pagina 1, nella 2 quelle della 2 e così via.

risposto 5 anni fa
Massimiliano Arione
X 0 X

Si ma se si desidera stampare tutte le pagine "in un colpo solo" e se si cerca il controllo al millimetro del layout allora è inevitabile produrre un PDF.

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Si ma se si desidera stampare tutte le pagine "in un colpo solo" e se si cerca il controllo al millimetro del layout allora è inevitabile produrre un PDF.

 :bye:

Io, come utente, mi aspetterei di stampare quello che vedo sullo schermo e non una tabella da 1000 righe quando ne sto vedendo 10.

Anche il controllo del layout al millimetro mi pare un po' una forzatura, se non c'è sulla pagina web non ne vedo l'esigenza sulla pagina stampata (tra l'altro l'utente può sempre gestirsi i margini di stampa)

risposto 5 anni fa
Massimiliano Arione
X 0 X
Io, come utente, mi aspetterei di stampare quello che vedo sullo schermo e non una tabella da 1000 righe quando ne sto vedendo 10.

In questo caso non è proprio così anche perché non è tanto un progetto orientato al web (anzi per nulla) ma una semplice applicazione gestionale e ho esigenze diverse

La soluzione del css mi intriga parecchio devo dire la verità comunque. Ci penserò su e magari ripropongo un problema specifico che dovrò affrontare.

grazie a tutti per le risposte

ps: ahh ma in che modo gestisco poi il css alternativo lanciato con la stampa?

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X
ps: ahh ma in che modo gestisco poi il css alternativo lanciato con la stampa?

Si

risposto 5 anni fa
Mario Santagiuliana
X 0 X
ps: ahh ma in che modo gestisco poi il css alternativo lanciato con la stampa?

Si

scusami non sono stato chiaro forse  ;D ;D ;D ;D volevo dire in che modo una volta che ho cliccato su stampa ad esempio?

con un semplice if o qualcosa di più pratico ancora in javascript?

Grazie

risposto 5 anni fa
frankphp
X 0 X

Forse non hai seguito bene il topic: se rileggi bene, vedrai che il punto centrale di cui stiamo parlando è un CSS con attributo media impostato a "print".

Il javascript:print() che ho proposto è assolutamente accessorio, giusto se vuoi mostrare un pulsante di stampa all'utente (che è puramente pleonastico, visto che implementa una funzionalità già presente nel browser, un po' come i link "indietro")

Rileggi, dai.

risposto 5 anni fa
Massimiliano Arione
X 0 X

Forse non hai seguito bene il topic: se rileggi bene, vedrai che il punto centrale di cui stiamo parlando è un CSS con attributo media impostato a "print".

Il javascript:print() che ho proposto è assolutamente accessorio, giusto se vuoi mostrare un pulsante di stampa all'utente (che è puramente pleonastico, visto che implementa una funzionalità già presente nel browser, un po' come i link "indietro")

Rileggi, dai.

scusami garak inizio a confondermi.

Tu hai detto qualche post fa:

"quando viene richiesta la stampa, la pagina non viene caricata un'altra volta, semplicemente viene applicato il css con media print "

adesso dici "Il javascript:print() che ho proposto è assolutamente accessorio, giusto se vuoi mostrare un pulsante di stampa all'utente etc.."

E' questo che mi sfugge.

Da un lato non seguo bene, dall'altra non ho chiaro il css, però cercate di essere piu' chiari anche voi non dando le cose per scontate.

Se ti riferisci al fatto che l'utente può lanciare la stampa dal browser pensavo che questo punto fosse chiaro; cioè non deve stampare solo ciò che vede (insomma è questa la mia esigenza adesso). Devo per forza aprire un'altra pagina (o lanciare il pdf) con i dati che poi vengono stampati.

Magari non ho capito io.

grazie

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

Allora la cosa che vuoi fare la puoi ottenere in 2 modi:

- crei un pdf (secondo me la scelta migliore se devi dare una tua impaginazione di un foglio, A4 per esempio, con le varie formattazioni);

- applichi alla pagina in cui si vedono i tuoi dati un secondo CSS dedicato alla stampa.

Il CSS dedicato alla stampa ti permette di modificare la grafica della tua pagina web nel momento in cui l'utente chiede di stamparla. Ad esempio se hai un banner pubblicitario che normalmente si vede, con il CSS di stampa puoi indicare al browser che quel banner non deve essere stampato (lo nascondi).

L'aggiunta di un pulsante "Stampa" in javascript è solo per dare la possibilità all'utente di cliccare un bottone per avviare l'interfaccia di stampa del browser, senza dover andare su: file->stampa ecc ecc.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Allora la cosa che vuoi fare la puoi ottenere in 2 modi:

- crei un pdf (secondo me la scelta migliore se devi dare una tua impaginazione di un foglio, A4 per esempio, con le varie formattazioni);

- applichi alla pagina in cui si vedono i tuoi dati un secondo CSS dedicato alla stampa.

Il CSS dedicato alla stampa ti permette di modificare la grafica della tua pagina web nel momento in cui l'utente chiede di stamparla. Ad esempio se hai un banner pubblicitario che normalmente si vede, con il CSS di stampa puoi indicare al browser che quel banner non deve essere stampato (lo nascondi).

L'aggiunta di un pulsante "Stampa" in javascript è solo per dare la possibilità all'utente di cliccare un bottone per avviare l'interfaccia di stampa del browser, senza dover andare su: file->stampa ecc ecc.

- per il momento sospendiamo la questione del pdf

-per quanto riguarda il css ora che ci penso visto che devo comunque creare una pagina a parte (per i motivi di cui sopra) ha poco senso parlare di nascondere o meno gli elementi. Posso creare un semplice css ad hoc per quella pagina visto che ha poco a che fare col layout della pagina visibile a browser.

Mi metto sotto e vi faccio sapere.

Grazie ancora.

risposto 5 anni fa
frankphp
X 0 X

Il css ad hoc che lo vuoi creare lo imposti come ti ha detto garak e avrai il css per la stampa.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Il css ad hoc che lo vuoi creare lo imposti come ti ha detto garak e avrai il css per la stampa.

capito.

Ma garak parlava della stessa pagina con gli stessi dati (quindi col css...ho letto nel frattempo anche qualcosa in giro per il web, nascondere o meno -  modificare-  elementi e layout idonei per la stampa ).

Io devo creare una nuova pagina php  che dovra' richiamare tutti i dati (magari aprirsi anche in pop up) e impostarla in modo che sia una specie di carta intestata (con i dati della ditta e logo) e stampare poi i dati di ricerca.

risposto 5 anni fa
frankphp
X 0 X

Ma garak parlava della stessa pagina con gli stessi dati (quindi col css...ho letto nel frattempo anche qualcosa in giro per il web, nascondere o meno -  modificare-  elementi e layout idonei per la stampa ).

Io devo creare una nuova pagina php  che dovra' richiamare tutti i dati (magari aprirsi anche in pop up) e impostarla in modo che sia una specie di carta intestata (con i dati della ditta e logo) e stampare poi i dati di ricerca.

Questo è un classico problema di usabilità: stai cercando di imporre delle scelte all'utente, prima di capire cosa l'utente veramente vuole e soprattutto cosa si aspetta.

1 - se io (utente) voglio stampare una pagina, mi aspetto di stampare (quantomeno nei contenuti) quello che vedo. Se vuoi che l'utente stampi tutti i dati, invece di un parte, devi sì mandarlo a un'altra pagina, ma anche fargli capire cosa sta facendo.

2 - il popup (al pari del target blank) andrebbe vietato per legge: se io (utente) voglio aprire un link in un'altra finestra, nella stessa finestra, in un'altra scheda o dove pippirmerlo preferisco, devo poterlo fare.

risposto 5 anni fa
Massimiliano Arione
X 0 X

Questo è un classico problema di usabilità: stai cercando di imporre delle scelte all'utente, prima di capire cosa l'utente veramente vuole e soprattutto cosa si aspetta.

1 - se io (utente) voglio stampare una pagina, mi aspetto di stampare (quantomeno nei contenuti) quello che vedo. Se vuoi che l'utente stampi tutti i dati, invece di un parte, devi sì mandarlo a un'altra pagina, ma anche fargli capire cosa sta facendo.

2 - il popup (al pari del target blank) andrebbe vietato per legge: se io (utente) voglio aprire un link in un'altra finestra, nella stessa finestra, in un'altra scheda o dove pippirmerlo preferisco, devo poterlo fare.

Aridajiè

Ragazzi scusate però cercate di essere un pochino meno autoreferenziali e sforzarvi di capire cosa vi chiedono gli utenti del forum (almeno per quanto mi riguarda) in base a esigenze che possono essere delle più varie.

Questa è un'applicazione che non ha niente a che vedere con internet ma sviluppata per una singolo utente (mio amico) e personalizzata in base a una specifica esigenza, che poi il progetto sia impostato male e programmato peggio questa è un'altra storia (lo so che devo studiare tanto)  e al momento non posso stravolgere tutto ma mi interessa risolvere il singolo problema.

L'usabilità? L'applicazione la devo installare su un netbook (problemi di dimensioni schermo che devo tener conto tra l'altro) e poi spiegargli il funzionamento (al 90% intuibile di già).

Tutto sommato (nonostante i miei limiti) l'applicazione sembra venuta bene e già fa molto di più rispetto a ciò che mi era stato "commissionato" (gratis).

Grazie

risposto 5 anni fa
frankphp
X 0 X

Questa è un'applicazione che non ha niente a che vedere con internet ma sviluppata per una singolo utente (mio amico) e personalizzata in base a una specifica esigenza, che poi il progetto sia impostato male e programmato peggio questa è un'altra storia (lo so che devo studiare tanto)  e al momento non posso stravolgere tutto ma mi interessa risolvere il singolo problema.

L'usabilità? L'applicazione la devo installare su un netbook (problemi di dimensioni schermo che devo tener conto tra l'altro) e poi spiegargli il funzionamento (al 90% intuibile di già).

Tutto sommato (nonostante i miei limiti) l'applicazione sembra venuta bene e già fa molto di più rispetto a ciò che mi era stato "commissionato" (gratis).

Ma guarda che l'usabilità non è un concetto riservato a internet. Anzi, si applica ai più svariati campi, anche (tanto per dire) alla segnaletica stradale.

Comunque, mi pare che alla fine la soluzione al tuo problema specifico è uscita fuori: fai un'altra pagina con tutti i dati e mettici un css con media print (o anche senza, se vuoi).

risposto 5 anni fa
Massimiliano Arione
X 0 X

Ma guarda che l'usabilità non è un concetto riservato a internet. Anzi, si applica ai più svariati campi, anche (tanto per dire) alla segnaletica stradale.

Comunque, mi pare che alla fine la soluzione al tuo problema specifico è uscita fuori: fai un'altra pagina con tutti i dati e mettici un css con media print (o anche senza, se vuoi).

Si garak (scusami se ti sono sembrato "aggressivo" nei toni) lo so che non è un concetto riservato solo ad internet.

Se fosse stata un'applicazione da distribuire (e magari vendere) a quante più persone possibili allora CERTO che avrei dovuto tener conto dell'usabilità a 360 gradi (e in via generale)......ma è per una sola persona (il resto l'ho specificato sopra).

Si, forse la soluzione è uscita fuori ed userò molto probabilmente il css per impostare la pagina (come tu del resto avevi inizialmente suggerito) per la stampa come si deve (non penso che a questo punto sia necessario 

media print)

Grazie ancora.

Ps: consentimi di dire che questo mio amico inizialmente aveva scaricato delle applicazioni (non php e html) da provare, ma evidentemente non gli sono piaciute tanto (magari non erano usabili ;D) per qualche motivo.

Anche io avevo cercato qualcosa di già fatto in internet in base alle sue richieste, ma credimi se ti dico che quasi tutte (anche qualcuna a pagamento) erano del tutto insoddisfacenti, con bug in alcuni casi, e tutt'altro che usabili e intuitive e anche inutilmente complicate a volte. La mia anche se non programmata ad oggetti (non lo so fare ancora) e "con i piedi"  :-[ è molto semplice e intuitiva e fa tutto quello che gli serve (e anche di più) come dicevo.

Poi c'è l'indiscutibile vantaggio che è personalizzata e modificabile in futuro in base a nuove esigenze.

risposto 5 anni fa
frankphp
X 0 X

Il tutto avviene in automatico, basta dichiarare il CSS in questo modo:

<link rel="stylesheet" type="text/css" href="stampa.css" media="print">

L'attributo media="print" specifica al browser che quando l'utente stamperà la pagina, allora lo stile da impiegare è specificato in stampa.css. Il browser quindi ignorerà il foglio di stile impiegato normalmente per rappresentare la pagina e userà questo.

Con javascript quindi devi solo lanciare la normale stampa della pagina: window.print()

Nel CSS per la stampa puoi inserire diversi stili "strategici" che ti permettano, ad esempio, di far sparire porzioni della pagina (display: none;), eliminare sfondi (background: none #FFF;), ecc.

Inoltre ci sono delle direttive CSS che influenzano la gestione del salto pagina:

http://www.w3schools.com/css/css_reference.asp#print

E' possibile anche usare la regola @page per definire i margini della pagina:

http://www.w3.org/TR/CSS21/page.html

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Inoltre ci sono delle direttive CSS che influenzano la gestione del salto pagina:

http://www.w3schools.com/css/css_reference.asp#print

Mi interessa soprattutto questo aspetto.

Se non posso gestire i dati  con la paginazione in modo semplice almeno che

il salto pagina della stampa non tagli la riga con i dati del record.

Ma quale devo usare esattamente?

ps: nel frattempo ho fatto delle prove.

Ho creato una pagina stampascad.php alla quale è stata inviata la query, poi ho stampato i dati con il ciclo while.

Sembra tutto in ordine e nel frattempo ho usato il css originale senza modifiche.

Il fatto che non mi spiego è che la pagina di stampa creata era a colori (tabelle, sfondi delle celle ecc ecc) come

quella originale ma una volta stampata sul foglio A4 risulta in bianco e nero (solo le immagini sono a colori).

In pratica sfondo celle e testo che prima erano colorati (con il css) adesso sono in bianco e nero.

Non che sia proprio un problema visto che devo stampare comunque in bianco e nero alla fine ma volevo capire bene come funziona la faccenda. Ci vuole  una dichiarazione di un css specifico per la stampa allora?

grazie

risposto 5 anni fa
frankphp
X 0 X

C'è un'opzione di stampa per stampare i colori di sfondo, solitamente disattivata di default.

Questo comunque dipende dal browser e non dal CSS.

risposto 5 anni fa
Massimiliano Arione
X 0 X

C'è un'opzione di stampa per stampare i colori di sfondo, solitamente disattivata di default.

Questo comunque dipende dal browser e non dal CSS.

Quale sarebbe?

Andrebbe benone anche un sfumatura di grigio alla fine.

Grazie

risposto 5 anni fa
frankphp
X 0 X

Quale parte di "dipende dal browser" non è chiara?

risposto 5 anni fa
Massimiliano Arione
X 0 X
Quale parte di "dipende dal browser" non è chiara?

avevo capito che si poteva "forzare"  l'opzione disattivata con i css.

risposto 5 anni fa
frankphp
X 0 X

ciao

Ragazzi è possibile in qualche modo eliminare dalla stampa su foglio A4 l'indirizzo della pagina web

 in alto a destra?

Grazie

risposto 5 anni fa
frankphp
X 0 X

ciao

Ragazzi è possibile in qualche modo eliminare dalla stampa su foglio A4 l'indirizzo della pagina web

 in alto a destra?

Grazie

mi autoquoto  8)

Trovato nelle impostazioni di firefox.

Ho attivato anche le opzioni per stampare numero pagina in basso a sinistra e data in basso a destra,

però in stampa questi 2 dati vengono tagliati. Ho visto che modificare il layout potrebbe portare a risultati poco prevedibili.

Cosa potrei fare?

Grazie

ps: per il resto è venuto un lavoro abbastanza soddisfacente (ho usato un css dedicato per la stampa)

risposto 5 anni fa
frankphp
X 0 X

Bravo!!!  :)

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Bravo!!!  :)

grazie Mario  :)

In merito al problema ho modificato le opzione del browser per stampare numero pagina e data.

Adesso li stampa in alto (a sinistra e a destra) tutti e due perfettamente visibili. Però adesso l'ultimo record stampato nella pagina (in una tabella) risulta tagliato.

I dati nella pagina di stampa vengono così stampati nel ciclo while dopo la query:

.............

echo "<table border=\"1\" width=\"100%\" id=\"tablein\"><tr class=alternate".$i.">

       <td height=\"54\" width=\"5%\" align=\"center\" id=\"row7\">$doc</td>

      <td height=\"54\" width=\"30%\" align=\"left\" id=\"row7\">$descrizione</td>

      <td height=\"54\" width=\"20%\" align=\"center\" id=\"row7\">$forn</td>

      <td height=\"54\" width=\"12%\" align=\"center\" id=\"row7\">$impvis</td>

      <td height=\"54\" width=\"10%\" align=\"center\" id=\"row7\">$scad</td>

      <td height=\"54\" width=\"8%\" align=\"center\" id=\"row7\"><img src=\"stili/".$icona."\" border=\"0\" /><small><sup>$dif_giorni</small></sup></td>

      <td height=\"54\" width=\"15%\" align=\"left\" id=\"row7\">$note</td>       

       </tr></table><br>";

   }

...   

Avete suggerimenti?

Grazie

risposto 5 anni fa
frankphp
X 0 X

Potrebbe dipendere dai margini impostati dal browser che sono inferiori ai margini minimi ottenibili con la stampante.

In Firefox, da ateprima di stampa -> Imposta pagina ..., è possibile impostare i margini della pagina. Prova a vedere se puoi risolvere così il problema.

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Potrebbe dipendere dai margini impostati dal browser che sono inferiori ai margini minimi ottenibili con la stampante.

In Firefox, da ateprima di stampa -> Imposta pagina ..., è possibile impostare i margini della pagina. Prova a vedere se puoi risolvere così il problema.

 :bye:

ci hai "azzeccato"!!  ;D ;D O0

Era proprio quello. Grazie.

Un'ultima cosa e spero di poter chiudere qui.

Il ciclo while stampa quei dati  dei record in una tabella.

Capita a volte a causa della descrizione che le singole righe stampate non risultino perfettamente parallele.

Per la pagina web che uso per visualizzare i risultati della ricerca (non quella che ho creato ad Hoc per la stampa)

avevo inserito nel css la riga:

word-wrap: break-word;

per le celle, in modo da forzare le parole ad andare da capo e a non deformarmi la cella.

In quest'ultimo caso l'opzione fa il suo dovere, nella pagina di stampa (non so forse perchè ho ciclato l'intera tabella e non la singola riga (tr)) invece la frase pur andando da capo mi scazza un po' la cella.

Ti viene in mente niente?

Grazie ancora

risposto 5 anni fa
frankphp
X 0 X

puoi fornirci un'immagine in cui si vede il difetto?

risposto 5 anni fa
Gianni Tomasicchio
X 0 X
puoi fornirci un'immagine in cui si vede il difetto?

ok, appena torno a casa. Adesso non posso.

Comunque la prossima volta (non mi sto riferendo a questo problema)

uso massiccio dei livelli e layout liquido.

Mi risparmio un po' di rogne per il mio prossimo progetto.

ps: Ho difficoltà a gestire l'interruzione di pagina.

Ho provato ad applicare all'elemento tabella i vari:

    *  page-break-after

    * page-break-before

    * page-break-inside

ma sembrano non avere effetto in firefox e in alcuni casi la tabella (vedi sopra ad esempio) con i dati del record

viene tagliata. Sembra una bella rogna anche questa. Ho provato un po' a risolvere la cosa manualmente aggiungendo qualche <br> ma risolvo in certi casi e si ripresenta in altri.....uff

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

Ecco perché, all'inizio della discussione, ho detto che se si desidera controllare con precisione il layout è necessario creare un PDF.

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Ecco perché, all'inizio della discussione, ho detto che se si desidera controllare con precisione il layout è necessario creare un PDF.

 :bye:

 >:( e va bene la prossima versione proverò' il pdf.

Solo però non ho capito come inserire nel codice che stampa la pagina i dati della query.

Ad esempio come potrei aggiungere i dati del ciclo while sopra con tutte le righe della tabella?

Un esempio pratico.

Grazie

risposto 5 anni fa
frankphp
X 0 X

Ti riferisci al caso del PDF?

risposto 5 anni fa
Gianni Tomasicchio
X 0 X
Ti riferisci al caso del PDF?

al TCPDF.

Mica ho capito bene come utilizzarlo!

Grazie

risposto 5 anni fa
frankphp
X 0 X

http://www.tcpdf.org/examples.php

questa pagina è piena di esempi, per ciascuno viene fornito lo script PHP ed il file PDF generato

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

http://www.tcpdf.org/examples.php

questa pagina è piena di esempi, per ciascuno viene fornito lo script PHP ed il file PDF generato

 :bye:

Si Gianni, grazie ma avevo già visto questa pagina.

Se non  sbaglio, l' esempio che si avvicina di più alle mie esigenze è:

table with primitive method.

Questo sistema utilizza le classi che io ancora non ho affrontato e l'esempio

non mi aiuta più di tanto.

I dati esterni (la parte che dovrebbe interessarmi), correggimi se sbaglio, li carica attraverso un file

esterno alla voce data loading:

http://www.tcpdf.org/examples/example_011.phps.

ma io ho bisogno di vedere cosa fa esattamente.

Potresti aiutarmi?

Grazie

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

Forse invece dovresti vedere l'esempio 48 che costruisce le tabelle utilizzando l'HTML.

Quindi ti basta prendere l'HTML che già produci e passarlo a tcpdf

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Forse invece dovresti vedere l'esempio 48 che costruisce le tabelle utilizzando l'HTML.

Quindi ti basta prendere l'HTML che già produci e passarlo a tcpdf

 :bye:

Anche l'esempio 21.

Hmmm incomincio a capirci qualcosa.

Bisogna semplicemente utilizzare il metodo (ho detto bene??)  writeHTML e scrivere

il codice php e html normalmente che poi verra' gestito dal metodo per la stampa.

Si possono aprire in queste pagine delle sessioni?

Io passo alcune variabili alla pagina di stampa con le sessioni. Mica c'è il rischio di ritrovarmi con l'errore di output o che so io?

Un'altra cosa.

Come posso indicare allo script di aggiungere la scritta "segue" a fine pagina se ce ne sono altre (a parte la numerazione che sembra faccia già)? Sarebbe utile per la stampa delle fatture.

Grazie

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

Con le sessioni non ci sono problemi. Per aggiungere del testo ("segue") c'è il metodo Write

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Con le sessioni non ci sono problemi. Per aggiungere del testo ("segue") c'è il metodo Write

 :bye:

si ma dove, nel senso che il testo "segue" a fine pagine se lo deve gestire lui, come gestisce la numerazione.

Intanto ho provato ad usarlo. Sembra abbastanza abbordabile anche se alcune cose non ho capito perchè non me le lascia fare.

Ho provato a settare un'intestazione fissa seguendo gli esempi e facendo così:

// Extend the TCPDF class to create custom Header and Footer

class MYPDF extends TCPDF {

    //Page header

    public function Header() {

        // Logo

        $image_file = K_PATH_IMAGES.'logo_example.jpg';

        $this->Image($image_file, 10, 10, 15, '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);

        // Set font

        $this->SetFont('helvetica', 'B', 20);

        // Title

        $this->Cell(0, 15, '<< TCPDF Example 003 >>', 0, false, 'C', 0, '', 0, false, 'M', 'M');

    }

    // Page footer

    public function Footer() {

        // Position at 15 mm from bottom

        $this->SetY(-15);

        // Set font

        $this->SetFont('helvetica', 'I', 8);

        // Page number

        $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');

    }

}

Ho smanettato un po' ma niente.

Alla fine ho cancellato tutto e ho inserito l'intestazione con logo manualmente..insomma come facevo col la precedente pagina. A proposito: Ho difficoltà a formattare gli elementi con il css.

A quanto pare bisogna agire sui singoli elementi. Anche i vari  valign delle celle sembrano non avere effetto (ma magari c'è come al solito qualcosa che mi sfugge)

Ho fatto questo per prova:

/**

 * Creates an example PDF TEST document using TCPDF

 * @package com.tecnick.tcpdf

 * @abstract TCPDF - Example: Removing Header and Footer

 * @author Nicola Asuni

 * @since 2008-03-04

 */

require_once('tcpdf/config/lang/eng.php');

require_once('tcpdf/tcpdf.php');

// create new PDF document

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information

$pdf->SetCreator(PDF_CREATOR);

$pdf->SetAuthor('Nicola Asuni');

$pdf->SetTitle('TCPDF Example 002');

$pdf->SetSubject('TCPDF Tutorial');

$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// remove default header/footer

$pdf->setPrintHeader(false);

$pdf->setPrintFooter(false);

// set default monospaced font

$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

//set margins

$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

//set auto page breaks

$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

//set image scale factor

$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

//set some language-dependent strings

$pdf->setLanguageArray($l);

// ---------------------------------------------------------

// set font

$pdf->SetFont('times', '', 12);

// add a page

$pdf->AddPage();

$tbl = <<<EOD

<table  border="0" width="100%">

  <tr>

  <td valign="top" width="227">

  <img border="0" src="stili/diciccio.png" width="203">

  </td>

  <td><br><br><br><br>

   Corso pippo I, 331<br>

   Paperopoli | FI<br>

   Tel - Fax: 555 551646<br>

   info@ciccio.it<br>

  </td>

  </tr>

  </table>

  <br>

   <hr width="100%">

  <br><br>

EOD;

$pdf->writeHTML($tbl, true, false, false, false, '');

// ---------------------------------------------------------

//Close and output PDF document

$pdf->Output('example_002.pdf', 'I');

E mi ritrovo con un output simile alla mia soluzione precedente con i css (niente male devo dire)

Ancora una cosa.

Sul un mio pc apro la pagina che produce il pdf in pop e visualizzo nella stessa subito il pdf prodotto e pronto da stampare (volendo), su un altro mio pc sul quale uso lo stesso firefox si apre la pop up ma il browser mi chiede di scaricare il pdf. Vorrei invece lo stesso risultato del mio pprimo pc ovvero il pdf aperto nella pop up.

A cosa può essere dovuto questo diverso comportamento dei browser?

Grazie

ps: adesso provo a stampare anche i record e vi faccio sapere

risposto 5 anni fa
frankphp
X 0 X

Bella la libreria TCPDf tra l'altro sviluppata da un italiano! Ma sono purtroppo sempre tanti file da scaricarsi sul sito per farla funzionare.

In PHP ci sono le Haru per il PDF ma sono sempre e solo nelle PECL  :wallbash:

risposto 5 anni fa
Marco Grazia
X 0 X

L'unico limite a TCPDF è l'architettura monolitica. Nonostante le funzionalità a disposizione siano le più svariate, la classe principale TCPDF è costitituita da un file di quasi un mega byte e più di 26 mila righe di codice!!!  :crazy:

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Sì infatti l'ho usata.

In ufficio però abbiamo preferito ricompilare la Haru, decisamente più compatta.

risposto 5 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda