2017-07-24 4 views
0

Ich versuche, ein bisschen eine einzigartige Tabelle in TCPDF zu erstellen, wie unten dargestellt:TCPDF move-able „Box“ mit Text erstellen, ohne ln Einstellungen

enter image description here gibt es die Beschriftungen, Kopf- und Zeilen-Setup ist einfach . Der schwierige Teil ist die "Bar".

Die Bar muss ein paar Dinge:

  • Editierbare X-Position
  • Text

Ursprünglich ich versuchte, Multicell zu verwenden; Allerdings habe ich einige seltsame Verhalten wie unten dargestellt:

Multi-Cell: Multi-Cell Weird Behavior

Ich glaube, dies wegen der ln Einstellungen ist. Wenn wir uns meinen Code ansehen, kann ich sehen, dass ich versuche, eine Zelle und dann eine MultiCell darin zu erstellen. Beide verwenden die Einstellung ln, um die nächste Zelle darunter zu setzen. Ich habe versucht, die Inte von MultiCell auf 0 (auf der rechten Seite) zu setzen, aber es hatte keine sichtbare Änderung.

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

Danach erfuhr ich über TextField. Als ich das versucht habe ich nur als seltsames Verhalten ...

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

Schließlich dachte ich die Rect Funktion des Verwendens ein Rechteck und Text auf den ziehen den Text zu erstellen. Mit Variablen könnte ich den Text an das Rechteck "kleben"; Das Textfeld verwendet jedoch auch die ln-Einstellung. Des Weiteren gibt an den eigentlichen Code suchen, ist diese Zeile:

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

sehen, da es eine Zelle schafft, dann sollte es in das gleiche Problem wie Multicell laufen, da der einzige Unterschied zwischen Handy und Multicell in meinem Fall ist die Fähigkeit, die X-Position vom linken Rand zu ändern.

Also bin ich mit dieser Frage fest: Wie kann ich eine "Box" zeichnen, die Text hat und horizontal verschoben werden kann? Wie das gemacht wird, ist nicht so wichtig, außer dass Bilder keine Option sind.

Antwort

0

Ich erkannte, dass ich nicht wirklich die ursprüngliche Reihe haben musste. Ich könnte nur mit der "Bar" rechnen.

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

Obwohl das gesagt ist es noch schön wäre, zu wissen, wie mit Reihen zu tun ...