2013-01-14 34 views
5

Tôi muốn nó để văn bản nói trắng sẽ sử dụng SetTextColor là màu trắng và màu cam để sử dụng màu cam.FPDF: Thay đổi màu văn bản trong khi ở trong Ô?

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

Tôi làm cách nào để ảnh hưởng đến từ 'ORANGE' để sử dụng màu văn bản màu cam?

+1

OK. Cảm ơn vì sự quan tâm của bạn. –

+0

Không thể liên kết này đưa ra một đầu mối? http://stackoverflow.com/questions/3477372/make-text-wrap-in-a-cell-with-fpdf – hmatar

+0

Nhưng tôi bối rối bởi điều này vì tôi vẫn muốn nó ở lại trên một dòng. Tôi đang xem xét tạo sự khác biệt trực quan cho màu văn bản. Có lẽ tôi đã hiểu sai điều gì đó. –

Trả lời

0

Trả lời # 1: Bạn không thể. Một ô theo định nghĩa là đồng nhất về phông chữ và màu sắc. Bạn có thể đo chiều rộng của các từ bằng getStringWidth và thực hiện nó trong một loạt các ô.

Trả lời # 2: Nhiều tập lệnh được đóng góp dựa trên việc xây dựng các biến thể của các hàm dựng sẵn. Sau khi tất cả, bạn có mã PHP ngay cho tất cả các FPDF. Bạn có thể làm cho hàm Cell_plus của riêng bạn có một mảng các cụm từ và một mảng khác hoặc hai hoặc ba thuộc tính. Sau đó, có thể đóng góp nó như là một kịch bản bổ sung.

4

Có thể có một mẹo nhỏ. Tôi chỉ làm cho nó in 2 tế bào, một trong khác, như thế này:

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

Kết quả là đây:

Multicollor cell result

Như tôi đã là một cơn sốt nhỏ, tôi không có thời gian để tạo ra một số chức năng để giúp đỡ với điều này, nhưng điều này sẽ là một ý tưởng điểm khởi đầu tốt :)

PS: Cho biết các bạn có tìm cách dễ dàng hơn không.

4

Tôi cũng cần chức năng đó. Đây là chức năng tôi bằng văn bản để làm một chuỗi màu đơn giản:

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

và bạn sử dụng nó như thế này:

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

tôi phải làm một điều tương tự. Thay vì màu sắc, tôi phải thay đổi kích thước của phông chữ. trong phòng giam của tôi, tôi gọi là chức năng thay vì như vậy, trong trường hợp của bạn, bạn có thể làm điều này

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

và xác định các chức năng như

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

và cùng đi cho cam.

TIP: để định vị nó đúng cách sử dụng GetX() và GetY()

+0

Giải pháp của bạn dường như không hoạt động đối với tôi ...làm thế nào bạn sẽ sử dụng getX() và getY() để tô màu một từ ở đâu đó trong một dòng trung tâm, như trong ví dụ? – user1111929

1

NẾU bạn không cần phải sử dụng phương pháp di động, bạn có thể sử dụng phương thức Write thay vì:

$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

Bạn cũng có thể sử dụng phương thức writeHTML (tcpdf ver 6.2) như vậy

$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, ''); 
Các vấn đề liên quan