2013-01-14 25 views
5

Lo voglio in modo che il testo che dice bianco userà SetTextColor come bianco e arancione per usare l'arancione.FPDF: cambia il colore del testo all'interno di una cella?

$pdf->SetTextColor(255,255,255); 
$pdf->Cell(50,0,'WHITE ORANGE ORANGE WHITE',0,1,'C'); 

Come si influisce sulle parole "ARANCIONE" per utilizzare un colore di testo arancione?

+1

OK. Grazie per il vostro interesse. –

+0

Non è possibile dare un indizio a questo link? http://stackoverflow.com/questions/3477372/make-text-wrap-in-a-cell-with-fpdf – hmatar

+0

Ma sono confuso da questo perché vorrei ancora che restasse su una riga. Sto cercando di fare una differenza visiva solo per il colore del testo. Forse ho letto male qualcosa. –

risposta

0

Risposta n. 1: impossibile. Una cella per definizione è uniforme in carattere e colore. Puoi misurare la larghezza delle parole con getStringWidth e farlo in una serie di celle.

Risposta n. 2: molti degli script forniti sono basati sulla costruzione di varianti di funzioni integrate. Dopotutto, hai il codice PHP proprio lì per tutti gli FPDF. Puoi creare la tua funzione Cell_plus che prende una serie di frasi e un altro array o due o tre di attributi. Allora magari contribuisci come uno script aggiuntivo.

4

È possibile con un piccolo trucco. Ho appena fatto che la stampa 2 celle, uno sopra l'altro, in questo modo:

//Setting the text color to black 
$pdf->SetTextColor(0,0,0); 

//Printing my cell  
$pdf->SetFont('Arial','B'); 
$pdf->Cell(55,5,"Black Text ",1,0,'C'); 
$pdf->SetXY($coordXbase,$coordY); 

//Setting the text color to red 
$pdf->SetTextColor(194,8,8); 

//Printing another cell, over the other 
$pdf->SetFont('Arial','B'); 
//Give some space from the left border, and print the red text after the black text that is in the cell behind this one. 
$pdf->Cell(55,5,"      Red Text",0,0,'C'); 
$pdf->SetXY($coordXbase,$coordY); 

//Setting the text color back to back, in the next cells. 
$pdf->SetTextColor(0,0,0); 

Il risultato è stato questo:

Multicollor cell result

perché ero un po 'di fretta, non ho avuto tempo di creare qualche funzione per aiutare con questo, ma questa sarebbe una buona idea del punto di partenza :)

PS: Dillo se voi ragazzi trovate un modo più semplice.

4

Avevo bisogno anche di quella funzionalità. Questa è la funzione che ho scritto per fare una stringa di colore semplice:

function cellMultiColor($stringParts) { 
    $currentPointerPosition = 0; 
    foreach ($stringParts as $part) { 
     // Set the pointer to the end of the previous string part 
     $this->_pdf->SetX($currentPointerPosition); 

     // Get the color from the string part 
     $this->_pdf->SetTextColor($part['color'][0], $part['color'][1], $part['color'][2]); 

     $this->_pdf->Cell($this->_pdf->GetStringWidth($part['text']), 10, $part['text']); 

     // Update the pointer to the end of the current string part 
     $currentPointerPosition += $this->_pdf->GetStringWidth($part['text']); 
    } 

e si utilizza in questo modo:

cellMultiColor([ 
    [ 
     'text' => 'Colored string example: ', 
     'color' => [0, 0, 0], 
    ], 
    [ 
     'text' => 'red', 
     'color' => [255, 0, 0], 
    ], 
    [ 
     'text' => ', ', 
     'color' => [0, 0, 0], 
    ], 
    [ 
     'text' => 'blue', 
     'color' => [0, 0, 255], 
    ], 
]); 
1

ho dovuto fare una cosa simile. Invece del colore dovevo cambiare la dimensione del font. nella mia cella ho chiamato la funzione invece così, nel tuo caso si può fare questo

$pdf->Cell(50,0,white($pdf,'White').orange($pdf,'orange'),0,1,'C'); 

e definire la funzione come

function white($pdf,$val){ 
       $pdf->SetTextColor(255,255,255); 
       return $pdf->Text(0,0,$val); 
       } 

e lo stesso vale per il colore arancione.

SUGGERIMENTO: per posizionare esso uso corretto GetX() e Gety()

+0

La tua soluzione non sembra funzionare per me ...come useresti getX() e getY() per colorare una parola da qualche parte in una linea centrale, come nell'esempio? – user1111929

1

SE non è necessario utilizzare il metodo delle celle, è possibile utilizzare il metodo di scrittura, invece:

$pdf->SetFont('Arial','b',12); 
$pdf->SetTextColor(153,0,153); 
$pdf->Write(7,'Text in color, '); 
$pdf->SetFont('Arial','',12); 
$pdf->SetTextColor(0,0,0); 
$pdf->Write(7,'and text in black all in the same line')); 
$pdf->Ln(7); 
0

È può anche utilizzare un metodo writeHTML (tcpdf ver 6.2) come ad esempio

$html = 'Simple text <span style="color: rgb(255,66,14);">Orange</span> simple <span style="color: rgb(12,128,128);">Turquoise</span>'; 
$this->writeHTML($html, true, false, true, false, '');