2013-10-10 18 views
6

Sto provando da due giorni, senza risultato, per regolare una sola altezza minima di una tabella in una tabella, senza successo.TCPDF - C'è un modo per regolare l'altezza di una singola tabella?

Sto usando il seguente metodo per creare la mia tabella:

<?php 
$html = <<<EOD 
<table style="border:1px solid black;"> 
    <tr> 
    <td> 
     Text 1 
    </td> 
    <td> 
     Text 2 
    </td> 
    </tr> 
</table> 
EOD; 

$this->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true); 
?> 

ho già provato a installare padding td, il margine td, altezza td, altezza TR, senza successo. Li ho provati anche da CSS e HTML. L'unica cosa che sono riuscito a ottenere, è vedere l'altezza di una fila più grande del valore originale, ma voglio renderla più corta. Ho provato a cercare nella documentazione di TCPDF, ma l'unica cosa che ho trovato è che TCPDF non supporta padding e margine. Qualcuno di voi conosce qualche tipo di "hack" per ottenere il risultato desiderato?

risposta

23

Quello che probabilmente stai incontrando è l'altezza effettiva delle righe di testo. Internamente, TCPDF utilizza il rapporto altezza cella per controllare l'altezza della linea visualizzata. Quando hai un TD con una sola riga di testo, il più piccolo che puoi fare è l'altezza totale della linea. Quindi la dimensione minima di una cella td è fontsize * cellheightratio + any cellpadding proscribed

il cellpadding può provenire dall'attributo cellpadding, quindi l'ho impostato su 0 per questo esempio. Credo che almeno alcune delle dimensioni del padding possano anche essere impostate con setCellPaddings prima di scrivere l'HTML.

È possibile impostare il rapporto di altezza cella utilizzando una dichiarazione CSS line-height per rendere più piccole le righe. (È anche possibile, ovviamente, solo di ridurre la dimensione del carattere pure.)

<?php 

//For demonstration purposes, set line-height to be double the font size. 
//You probably DON'T want to include this line unless you need really spaced 
//out lines. 
$this->setCellHeightRatio(2); 

//Note that TCPDF will display whitespace from the beginning and ending 
//of TD cells, at least as of version 5.9.206, so I removed it. 
$html = <<<EOD 
<table style="border:1px solid black;" border="1" cellpadding="0"> 
    <tr> 
    <td>Row 1, Cell 1</td> 
    <td>Row 1, Cell 2</td> 
    </tr> 
    <tr style="line-height: 100%;"> 
    <td>Row 2, Cell 1</td> 
    <td>Row 2, Cell 2</td> 
    </tr> 
    <tr style="line-height: 80%;"> 
    <td>Row 3, Cell 1</td> 
    <td>Row 3, Cell 2</td> 
    </tr> 
    <tr style="line-height: 50%;"> 
    <td>Row 4, Cell 1</td> 
    <td>Row 4, Cell 2</td> 
    </tr> 
</table> 
EOD; 

$this->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true); 

Il codice di cui sopra sulla mia installazione 5.9.206 produce questo: Visual example of set line-heights.

Questo funziona a riga 1 è grande , due volte la dimensione del carattere. La riga 2 imposta l'altezza della linea in modo che corrisponda al 100% della dimensione del carattere. La riga 3 è 80%. Riga 4 c'è il 50%.

* Si noti che se il testo si avvolge, sembrerà terribile con altezze di linea molto ridotte.

+0

Questo è corretto. E si applica anche alle celle vuote del tavolo. – 321zeno

+2

Mi sono imbattuto anche in questo, tranne che non stavo usando le celle HTML, solo il metodo standard della cella. Avevo bisogno di un'altezza esatta per far funzionare correttamente i bordi della pagina e ho passato ore a grattarmi la testa, non sapendo che FontSize stava cambiando le dimensioni, lanciando le interruzioni. Salvando la dimensione del font originale, quindi chiamando SetFontSize (0) prima di scrivere la cella con un Ln(), quindi ripristinare la dimensione del carattere corretto. Grazie per questo! – gregthegeek

+0

come aggiungere più $ this-> setCellHeightRatio (2); ? – wahmal