借助php帮助PDF生成

时间:2011-07-29 05:37:04

标签: php fpdf

我有代码为我生成PDF。我正在使用FPDF生成PDF。有时候它会放弃,但有时它表现得很奇怪,它会创建格式错误的pdf,因此它不会在任何pdf阅读器中打开。

此外,当它给我糟糕的格式时,pdf的大小会急剧增加..

任何人都可以提出特殊情况会出现什么问题。?

这是代码..

$pdf_Str = "<table border='1'>
      <tr bgcolor=\"#666666\">
          <td>Name</td>
          <td>Number</td>
          <td>Adjusted Amount</td>
          <td>Invoice Date</td>
          <td>Transaction Date</td>
          <td>Amount</td>
          <td>Balance</td>
          <td>Record Type</td>
          <td>Session</td>
          <td>Course</td>
    </tr>";
 foreach($data as $row){
   $pdf_Str .="<tr>
        <td>".$row['student_name']."</td>
        <td>".$row['invoiceNumber']."</td>
        <td>".$row['invoiceAdjustedAmount']."</td>
        <td>".($row['invoiceDate']!=''?$row['invoiceDate']:'&nbsp;')."</td>
        <td>".($row['TransactionDate']!=''?$row['TransactionDate']:'&nbsp;')."</td>             
        <td>".($row['invoiceAmount']!=''?$row['invoiceAmount']:'&nbsp;')."</td>
        <td>".($row['invoiceBalance']!=''?$row['invoiceAmount']:'&nbsp;')."</td>
            <td>".($row['recordType']!=''?$row['recordType']:'&nbsp;')."</td>
        <td>".$row['sessionName']."</td>
        <td>".($row['catalogName']!=''?$row['catalogName']:'&nbsp;')."</td>
    </tr>";
    }
    $pdf_Str .='</table>';  
    $p = new PDFTable();
    $p->setfont('times','',12);
    $p->htmltable($pdf_Str);//
    $p->output("student_info.pdf",'I'); 

3 个答案:

答案 0 :(得分:2)

您无法在PHP中创建表。你必须使用fpdf内置函数来做到这一点。

参考: create table in pdf with wrap data using fpdf in php

并且检查一下它可能对你有帮助。

http://www.elated.com/articles/create-nice-looking-pdfs-php-fpdf/

答案 1 :(得分:1)

据我所知,FPDF不允许转换html-&gt; pdf。您需要使用自己的函数(Cell(),MultyCell()等)。但你可以使用库mPDF 它真的很棒,非常容易使用。它可以转换html + css(!) - &gt; pdf。它处理这项工作很棒。我推荐这个库。

我希望它会有所帮助。

答案 2 :(得分:0)

您可以尝试http://code.google.com/p/dompdf/有大量的HTML到PDF库可用,我使用FPDF创建具有复杂表格的发票,只要css不是太复杂,它通常可以很好地呈现。 / p>

我仍然发现使用FPDF库本身会产生更好的结果,比如打印就绪PDF,你需要付出努力并坐在那里输出文件内联点击刷新同时轻推元素。

对于上述内容,您应该可以使用

创建一些不错的代码
    $string   = 'Name';
    $border   = 1;
    $padding  = 0;
    $ln       = 0;
    $align    = 'L';
    $pdf->Cell($pdf->GetStringWidth($string)+$padding,3,0,'$align'); 

将您的标题和数据放入数组并循环通过在每行末尾将$ ln交换为2,将边框保留为0,直到您对输出等满意为止。