TCPDF创建可移动的"框"使用文字而不使用ln设置

时间:2017-07-24 16:26:45

标签: tcpdf

我试图在TCPDF中创建一个独特的表,如下所示:

enter image description here 获取字幕,标题和行设置很容易。困难的部分是" bar"。

酒吧需要一些东西:

  • 可编辑的X位置
  • 文本

最初我试图使用MultiCell;但是,我有一些奇怪的行为,如下所示:

多小区: Multi-Cell Weird Behavior

我认为这是因为ln设置。如果我们查看我的代码,您可以看到我正在尝试创建一个Cell,然后在其中创建一个MultiCell。这两个都使用ln设置将下一个单元格放在下面。 我尝试将MultiCell的ln设置为0(右侧),但没有明显的变化。

//multi cell
// extend TCPF with custom functions
class MYPDF extends TCPDF {
    // SCC table
    public function SCCTable($headers,$rows) {
        // Colors, line width and bold font
        $this->SetFillColor(0,128,128);
        $this->SetTextColor(0);
        $this->SetDrawColor(0);
        $this->SetLineWidth(0.3);
        $this->SetFont('', 'B');
        // Header
        $num_headers = count($headers);
        for($i = 0; $i < $num_headers; ++$i) {
            $this->Cell(
                $headers[$i]->width, 
                $headers[$i]->height, 
                $headers[$i]->text, 
                1, 
                0, 
                'C', 
                1
            );
        }
        $this->Ln();
        // Color and font restoration
        $this->SetFillColor(255);
        $this->SetTextColor(0);
        $this->SetFont('');
        // Data
        $fill = 0;
        $num_rows = count($rows);
        for($i = 0; $i < $num_rows; ++$i){
            $this->Cell(//Row
                $headers[$i]->width * $num_headers, //Row width should be the sum of all header width. 
                $rows[$i]->height,
                //Row's Text
                $this->MultiCell(
                    $rows[$i]->width, 
                    $rows[$i]->height, 
                    $rows[$i]->text, 
                    0, //Border
                    "C", //Text Align
                    false, //fill, determines if the background is painted or transparent (false). 
                    2, //ln, 1 = Next cell starts at beginning of new line.
                    $rows[$i]->x, 
                    $rows[$i]->y 
                ), 
                1, //Border
                2, //ln, 1 = Next cell starts at beginning of new line.
                "L" //text align
            );
        }
    }
}

在此之后我发现了TextField。当我尝试这个时,我得到了同样奇怪的行为......

enter image description here

//text field
// extend TCPF with custom functions
class MYPDF extends TCPDF {
    // SCC table
    public function SCCTable($headers,$rows) {
        // Colors, line width and bold font
        $this->SetFillColor(0,128,128);
        $this->SetTextColor(0);
        $this->SetDrawColor(0);
        $this->SetLineWidth(0.3);
        $this->SetFont('', 'B');
        // Header
        $num_headers = count($headers);
        for($i = 0; $i < $num_headers; ++$i) {
            $this->Cell(
                $headers[$i]->width, 
                $headers[$i]->height, 
                $headers[$i]->text, 
                1, 
                0, 
                'C', 
                1
            );
        }
        $this->Ln();
        // Color and font restoration
        $this->SetFillColor(255);
        $this->SetTextColor(0);
        $this->SetFont('');
        // Data
        $fill = 0;
        $num_rows = count($rows);
        for($i = 0; $i < $num_rows; ++$i){
            $this->Cell(//Row
                $headers[$i]->width * $num_headers, //Row width should be the sum of all header width. 
                $rows[$i]->height,
                //Row's Text
                $this->TextField(
                    $rows[$i]->text,
                    $rows[$i]->width, 
                    $rows[$i]->height, 
                    [],
                    [],
                    $rows[$i]->x, 
                    $rows[$i]->y                                                                    
                ), 
                1, //Border
                2, //ln, 1 = Next cell starts at beginning of new line.
                "L" //text align
            );
        }
    }
}

最后我想到使用Rect函数创建一个矩形,并Text来绘制文本。使用变量我可以&#34;粘合&#34;矩形的文本;但是,textfield也使用ln设置;此外,查看实际代码有这一行:

$this->Cell(0, 0, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign);

看到它创建了一个单元格,那么它应该遇到与MultiCell相同的问题,因为在我的情况下,Cell和MultiCell之间的唯一区别是能够从左边框改变x位置。

所以我一直坚持这个问题:我怎样画一个&#34;框&#34;有文字,可以水平推动? 除了图像不是一个选项之外,如何做到这一点并不重要。

1 个答案:

答案 0 :(得分:0)

我意识到我实际上并不需要原始行。我可以用“酒吧”来表达。

enter image description here

$this->MultiCell(
    $rows[$i]->width, 
    $rows[$i]->height, 
    $rows[$i]->text, 
    1, //Border
    "C", //Text Align
    true, //fill, determines if the background is painted (true) or transparent (false). 
    2, //ln, 1 = Next cell starts at beginning of new line.
    $rows[$i]->x, 
    $rows[$i]->y 
);

尽管如此,知道如何处理行仍然很好......