Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema con php e pdf (libreria fpdf)

    ciao a tutti.

    ecco il mio problema:
    con la solita pagina php leggo da un db un'anagrafica e la schiaffo sul browser. La pagina che presenta il risultato della query contiene anche un bel bottone "crea pdf" che mi posta i campi di ricerca ad un file creapdf.php che mi crea un file .pdf (usando la libreria fpdf) tutto bello impaginato e fatto bene.
    E fin qui nessun problema.
    Il problema sta qua: nell'anagrafica c'è anche un campo 'note' che può essere anche molto lungo.
    Tutti i campi, diciamo a lunghezza standard, li scrivo con una Cell(), mentre quelli come il campo 'note' li scrivo con una Multicell() perchè la Cell(), se la stringa è troppo lunga se ne frega e va avanti a scrivere il testo rischiando di andare a coprire le scritte vicine. Mentre la Multicell(), se il testo è più lungo della larghezza della cella,fa da solo un bel 'a capo' e va avanti a scrivere.
    Questo mi crea chiaramente problemi di impaginazione perchè io stampo una tabella e se in alcuni record il campo 'note' è lungo (quindi la Multicell() va a capo) mi ritrovo che il campo 'note' del record attuale va a sovrascrivere il campo 'note' del record successivo.

    Ho fatto diversi tentativi per ovviare al problema ma senza risultato:

    -scrivo tutti i campi con Multicell() sperando che tra Multicell "si capiscano" che una si è allargata e si allarghino tutte, ma nulla.

    -con strlen controllo che il campo 'note' non sia troppo lungo, e se lo è raddoppio l'altezza della cella. Del tipo:
    codice:
    $y=6; //altezza standard per le celle
    if (strlen($note) > 50)
      $y=12; //altezza doppia se $note è troppo lungo
    $this->Cell(35, $y, $cognome." ".$nome, 1, 0, 'C')
    $this->Cell(35, $y, $azienda, 1, 0, 'C');
    $this->Multicell(90, $y, $note, 1, 'L');
    Ma la Multicell() scrive in centro alla cella (come altezza) quindi se va a capo mi allunga la cella ancora di più e in pratica mi ritrovo con una cella alta 4 volte una cella normale.
    Infatti con il codice postato mi ritrovo con 'cognome nome' e 'azienda' in una cella alta 12 e 'note' in una cella che da codice ha altezza 12, ma sul pdf ha altezza 24.

    Idee finite. Non so proprio come gestire la cosa.


    Altra domanda:
    se tra un anno non mi piace più il font
    codice:
    $this->SetFont('Arial', '', 8);
    e lo voglio mettere a 12, mi sballa tutta l'impaginazione? Per esempio la strlen() non dovrà più controllare con 50 ma magari con 40. Come posso tranquillamente cambiare il font evitando di dover andare poi a ricontrollare tutto e aggiustare l'impaginazione?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    153
    Ciao,

    prova un pò questa estensione http://fpdf.de/downloads/addons/52/


    devi sempre calcolare l'altezza, ma cosi puoi allineare il testo in verticale...

  3. #3
    Oh mio Dio pasqui! ma quanto sei sgravo!!!

    Funzionato al primo colpo, con gli accorgimenti del caso, ma perfetto. Fa proprio quello che volevo.
    Grande!


    Per quanto riguarda invece la mia seconda domanda?
    se tra un anno non mi piace più il font
    codice:
    $this->SetFont('Arial', '', 8);
    e lo voglio mettere a 12, mi sballa tutta l'impaginazione? Per esempio la strlen() non dovrà più controllare con 50 ma magari con 40. Come posso tranquillamente cambiare il font evitando di dover andare poi a ricontrollare tutto e aggiustare l'impaginazione?

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    153
    Potresti inserire manualmente le interruzioni di riga ogni tot caratteri ( iteri le stringhe ed ogni tot caratteri inserisci l'accapo), in questo modo hai il pieno controllo sul numero di righe per ogni cella

    a questo punto per calcolare l'altezza della cella :

    numero righe * altezza singola riga



    Cosi quando hai bisogno di aumentare il font diminuisci il numero di caratteri per riga ed aumenti l'altezza di ogni singola riga, l'altezza della cella (e quindi l'inizio di quella subito sotto) ti si sistema da sola

  5. #5
    La cosa non mi pare così facile e immediata come dirla.
    (ammetto di essere alle prime armi in php)

    Mi spiego...almeno per come l'ho pensata grazie alla tua indicazione:
    Non posso decidere a priori e fregandomene che (x es) al carattere 50 vada a capo perchè rischierei di troncare una parola e non è simpatico. Quindi se sto troncando una parola, vado alla ricerca dello spazio precedente e mando a capo.
    Devo studiarmela un attimo, ma se po fa!

    grazie ancora pasqui

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.