Как создавать таблицы FPDF? - PullRequest
1 голос
/ 09 января 2011

У меня проблема с созданием таблиц с помощью fpdf.

Может кто-нибудь помочь мне сделать эту страницу (или хотя бы сказать мне, как это сделать)?

Или вы можете показать, как преобразовать таблицы HTML в таблицы FPDF и поместить код здесь?

У меня также есть это (вместе с подключением к базе данных):

$person = mysql_fetch_array($result);

Я бы хотел, чтобы это работало при добавлении в таблицы с этим = (пример)

$pdf->Cell(0,260,''.$person["CA"],'C',0 ,1); --- .$person["CA"]

Кто-нибудь может мне помочь?

1 Ответ

6 голосов
/ 09 января 2011

Ну, FPDF работает как пишущая машинка, в которой есть перемещающаяся точка X, Y, в которую он пишет, которую вы можете перемещать вручную или позволить ей сделать это за вас.

Я не знаю, требуется ли огромный пробел слева. Если это так, вам придется вызывать $ this-> SetX ($ координата) перед каждой записью.

Вы должны сделать что-то вроде этого:

class InvoicePDF extends FPDF //Create a new class to contain the header/footer/etc. which extends FPDF
{
    public function Header
    {
    //Header stuff goes here, like the big Invoice
        $this->SetY(10); //SetY 10 units down from the top, experiment with distance to get appropriate distance
        $this->SetFont('Arial','',20); //Set Font to Arial/Helvetica 20 pt font
        $this->SetTextColor(0,0,0); //Set Text Color to Black;
        $this->Cell(0,9,"INVOICE",0,0,'R');  //Write the word INVOICE Right aligned in a box the width of the page, will put it at the far right of the page
     }

     public function Footer
     {
       //any footer stuff goes here
     }

     public function FillHeadInfo($info) //$info would be an array of the stuff to fill the small table at the top
     {
          $this->SetY(0); //reset the Y to the original, since we moved it down to write INVOICE
          $this->SetFont('Arial','',12);
          $this->SetFillColor(224,224,224); //Set background of the cell to be that grey color
          $this->Cell(20,12,"Order #",1,0,'C',true);  //Write a cell 20 wide, 12 high, filled and bordered, with Order # centered inside, last argument 'true' tells it to fill the cell with the color specified
          $this->Cell(20,12,"Coding",1,0,'C',true);
          $this->Cell(20,12,"Sales Code",1,1,'C',true); //the 1 before the 'C' instead of 0 in previous lines tells it to move down by the height of the cell after writing this

          $this->Cell(20,12,$info['ordernum'],1,0,'C');
          $this->Cell(20,12,$info['coding'],1,0,'C');
          $this->Cell(20,12,$info['salescode'],1,1,'C');

          $this->Cell(40,12,"Name & Address",1,0,'C',true);
          $this->Cell(20,12,"Date",1,1,'C',true);
          $y = this->GetY(); //Need the current Y value to reset it after the next line, as multicell automatically moves down after write
          $x = this->GetX(); // Might need the X too
          $this->MultiCell(40,12,$info['customername'] . "\n" . $info['address'] . "\n" . $info['city'] . ', ' . $info['state'] . ' ' . $info['zip'],1,'L',false); //I assume the customer address info is broken up into multiple different pieces
          $this->SetY($y);  //Reset the write point
          $this->SetX($x + 40); //Move X to $x + width of last cell

          $this->Cell(20,36,date("format",strtotime($info['date'])),1,1,'C');  //Might be easier to use $this->Rect() to draw rectangles for address and date and then write the address and date into them without borders using SetX and SetY, if the borders don't line up or whatever

     }

     public function fillItems($items)
     {
          //You'd build the items list much the same way as above, using a foreach loop or whatever
          //Could also easily combine this function and the one above
     }
}

Затем, при создании PDF вы должны сделать что-то вроде этого:

require_once('fpdf.php');
require_once('class.invoicepdf.php');
//Get whatever info you need to fill the pdf
$pdf = new InvoicePDF('P','mm','Letter');
$pdf->AddPage();
$pdf->FillHeadInfo($info);  //Could also pass $_POST and rely on the keys of the $_POST array
$pdf->FillItems($items);
$pdf->Output('filename.pdf','I');

Кстати, я бы посоветовал вместо того, чтобы пытаться записать его из $ _POST, вы сохраняете заказ в БД, а затем передаете идентификатор заказа в сценарий, чтобы записать pdf по ссылке и через $ _GET, попросите скрипт получить информацию из БД, таким образом вы можете выбрать только ту информацию, которая вам нужна.

...