2013-01-14 92 views
5

我想要它,以便說白色的文本將使用SetTextColor作爲白色,橙色使用橙色。FPDF:在單元格內改變文字顏色?

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

如何影響「橙色」字樣以使用橙色文字顏色?

+1

好的。謝謝你的關心。 –

+0

這個鏈接不能給出線索嗎? http://stackoverflow.com/questions/3477372/make-text-wrap-in-a-cell-with-fpdf – hmatar

+0

但我很困惑,因爲我仍然希望它留在一條線上。我正在考慮僅爲文本顏色製作視覺差異。也許我誤解了一些東西。 –

回答

0

答案#1:你不行。根據定義,單元格的字體和顏色是統一的。您可以使用getStringWidth度量單詞的寬度,並在一系列單元格中進行。

解答#2:許多貢獻的腳本是基於構建內置函數的變體。畢竟,所有的FPDF都有PHP代碼。您可以創建自己的Cell_plus函數,該函數需要一組短語和另一個數組或兩個或三個屬性。然後可以將它作爲附加腳本提供。

4

這是可能的一個小動作。我做到了打印2個細胞,一個比其他,像這樣:

//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); 

結果是這樣的:

Multicollor cell result

因爲我是有點倉促,我沒有時間去創造一些函數來幫助這一點,但這將是一個很好的起點想法:)

PS:告訴你們如果找到一個更簡單的方法。

4

我也需要這個功能。這是函數我寫做一個簡單的彩色字符串:

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']); 
    } 

並且你使用這樣的:

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

我不得不做類似的事情。我不得不改變字體的大小。 在我的小區我調用的函數,而不是 所以,你的情況,你可以做到這一點

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

和定義功能

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

,並同樣爲橙色。

提示:將它定位正確使用的getX()和的getY()

+0

您的解決方案似乎不適合我...你將如何使用getX()和getY()在中心線的某個位置着色單詞,如示例中所示? – user1111929

1

如果你不需要使用電池的方法,你可以使用Write方法代替:

$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

你也可以使用writeHTML方法(tcpdf ver 6.2)像這樣

$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, '');