douhe5092 2014-06-12 11:56
浏览 43
已采纳

如何使用FPDF在PHP中打印PDF。

I'm trying to print an invoice in PHP using the FPDF library. I can get it to display line items, but it's never in the right format. I tried to change the X and Y positions but I can't get it to do what I want. I would like to display the logo and address on the left side, and the invoice number and order data on the right side of the document.

Here is the code I have so far:

require('includes/fpdf/fpdf.php');

//Create a new PDF file
$pdf=new FPDF();
$pdf->AddPage();


//Fields Name position
$Y_Fields_Name_position = 20;
//Table position, under Fields Name
$Y_Table_Position = 26;


//First create each Field Name
//Gray color filling each Field Name box
$pdf->SetFillColor(232,232,232);
//Bold Font for Field Name
$pdf->SetFont('Arial','B',12);
$pdf->SetY($Y_Fields_Name_position);
$pdf->SetX(5);
$pdf->Cell(25,6,'Order Date',1,0,'L',1);


$pdf->SetX(30);
$pdf->Cell(50,6,'Graphixide Order No',1,0,'L',1);


$pdf->SetX(75);
$pdf->Cell(40,6,'Artwork',1,0,'L',1);


$pdf->SetX(110);
$pdf->Cell(20,6,'PO #',1,0,'L',1);


$pdf->SetX(130);
$pdf->Cell(20,6,'Quantity',1,0,'L',1);


$pdf->SetX(150);
$pdf->Cell(25,6,'Amount',1,0,'L',1);


$pdf->SetX(175);
$pdf->Cell(25,6,'Comments',1,0,'L',1);




//Now show the 3 columns
$pdf->SetFont('Arial','',12);
$pdf->SetY($Y_Table_Position);
$pdf->SetX(5);
$pdf->MultiCell(25,6,$column_order_date,1);


$pdf->SetY($Y_Table_Position);
$pdf->SetX(30);
$pdf->MultiCell(80,6,$column_order_no,1);


$pdf->SetY($Y_Table_Position);
$pdf->SetX(75);
$pdf->MultiCell(40,6,$column_artwork,1);




$pdf->SetY($Y_Table_Position);
$pdf->SetX(110);
$pdf->MultiCell(20,9,$column_cpo,1);


$pdf->SetY($Y_Table_Position);
$pdf->SetX(130);
$pdf->MultiCell(20,6,$column_order_quantity,1);


$pdf->SetY($Y_Table_Position);
$pdf->SetX(150);
$pdf->MultiCell(75,6,$column_order_amount,1);


$pdf->SetY($Y_Table_Position);
$pdf->SetX(175);
$pdf->MultiCell(25,10,$column_comments,1);


$pdf->SetY($Y_Table_Position);
$pdf->SetX(150);
$pdf->MultiCell(130,6,'$ '.$total,1,'R');


//Create lines (boxes) for each ROW (Product)
//If you don't use the following code, you don't create the lines separating each row
$i = 0;




while ($i < $number_of_products)
{
$pdf->SetX(45);
$pdf->MultiCell(120,6,'',1);
$i = $i +1;
}
$pdf->Output();
?>

The output does display, but it doesn't use the proper formatting I want it to. Here is what I'm getting:

enter image description here


I also tried to change the header and footers like this, but for some reason that only displays the logo. Code:

class PDF extends FPDF
{


function Header()
{
    // Logo
    $this->Image('images/logo.png',10,6,30);
    // Arial bold 15
    $this->SetFont('Arial','B',15);
    // Move to the right
    $this->Cell(80);
    // Title
    $this->Cell(30,10,'Title',1,0,'C');
    // Line break
    $this->Ln(20);
}


// Page footer
function Footer()
{
    // Position at 1.5 cm from bottom
    $this->SetY(-15);
    // Arial italic 8
    $this->SetFont('Arial','I',8);
    // Page number
    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
  • 写回答

1条回答 默认 最新

  • douwan7382 2014-06-12 12:43
    关注

    If you mix Cell and MultiCell, you have to pre-calculate the needed lines/height for each row and reset the X and Y position after a MultiCell call manually because MultiCell will automatically set the position to the beginning of the next line.

    A good example and a method to pre-calculate the needed lines is available in this script.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理