PHP生成PDF发票

28

大家好,有没有人知道如何通过PHP创建一个漂亮格式的PDF发票?

我希望能够创建一个头部,并在其下列出产品的详细清单,最好使用表格进行排版。我已经在谷歌上快速搜索了一下,发现可以生成PDF文件,但要使其具有良好的样式则需要另行解决。

谢谢。


1
你有接触过FPDF吗?我之前研究过它...看起来需要花费很多功夫,但很有前途。 - Trevor Arjeski
1
是的,现在看一下 - 这里有非常好的教程:http://www.web-development-blog.com/archives/create-pdf-documents-online-with-tcpdf/ - Martin
我建议看一下actualreports.com,他们提供API和基于浏览器的文档编辑器,用于创建不同的模板。请注意,他们会收取服务费用。 - Tanel
一个专门为发票设计的PDF生成器-https://packagist.org/packages/quickshiftin/php-pdf-invoice - quickshiftin
6个回答

26

我建议创建一个HTML/CSS的表现形式,以此来生成PDF。有许多应用程序可以处理转换,这里有一个很好的帖子,其中有许多答案:使用PHP将HTML+CSS转换为PDF?


1
感谢您的回答+1。这听起来是一个不错的解决方案,将有助于今后查看此内容的人们,但是对于我的情况,我需要使用cron每月生成一定数量的发票。这就是为什么我没有选择您的答案作为正确答案的原因。 - Martin
我之前做过一些PDF生成的工作,那真是太痛苦了。用HTML设计并转换就容易多了,正如Timothy所说的那样。我唯一能想到需要手动生成的原因是如果你需要控制页面分页。 - LaVache

19

我使用TCPDF(参见http://www.tcpdf.org/)进行此操作:它非常强大,而且设置也不太痛苦。我想说,根据您的数据源,您可能会遇到一些问题。在我的情况下,我的数据来自于我的会计系统的SOAP接口,并且我使用CodeIgniter作为我的应用程序,我可以这样做:

$address = $extraclient->get_company_address();

// generate the PDF invoice
$this->load->library('pdfinvoice');

// set document information
$this->pdfinvoice->SetSubject("Invoice " . $data_invoice['code_invoice']);

// add a page
$this->pdfinvoice->AddPage();
$this->pdfinvoice->StartPageOffset();

// write the client's details out
$width = $this->pdfinvoice->GetPageWidth()/2;
$margins = $this->pdfinvoice->getMargins();
$this->pdfinvoice->SetFont('times', 'b', $this->pdfinvoice->bigFont );
$this->_row($width, array("From:", "To:"));
$this->pdfinvoice->SetFont('times', 'i', $this->pdfinvoice->smallFont );
$this->_row($width, array("MY NAME", $customer['name_contact']));
$this->_row($width, array($address['phone'], $customer['name_customer']));
$this->_row($width, array($address['street'], $customer['address1_street']));
$this->_row($width, array($address['city']. ", ".$address['state']." ".$address['zipcode'],
                          $customer['address1_city']. ", ".$customer['address1_state']." ".$customer['address1_zip

完整的代码实在是太长了,不过你应该能够理解,并且你可以获得相当精确的布局控制。


2
如果您已经在使用phpExcel,它已经内置了该库(因此您只需调用类即可)。 - rosh3000

1
你可能想看一下html2Pdf。它是一个基于FPDF的php类,可以让你从HTML创建PDF文件。所以只需使用HTML格式化文本,然后创建其PDF即可。它非常灵活,并且提供了很好的控制。 SourceForge链接

1

请查看来自Composer的php-pdf-invoice库。该库已经专门设计用于生成发票,因此易于快速集成!

composer require quickshiftin/php-pdf-invoice

您可以生成类似于此的PDF文件。

Here's a sample invoice

README上有一个用法示例。本质上,您需要实现两个接口,一个用于订单,另一个用于订单项。您还可以根据自己的喜好配置字体和颜色。


0

虽然您可以通过编程方式生成PDF文档,但我们发现最好的方法是仅生成PDF文档的HTML页面,并使用某种工具/服务将HTML转换为PDF。

如果您正在寻找可以托管的应用程序,可以检查以下内容:

  • wkhtmltopdf - 使用Webkit将HTML呈现为PDF。在某些情况下可以正常工作。
  • PhantomJS - 已停止维护,不建议使用。
  • 无头Chrome - 最好的选择,但本身并不是解决方案。您需要根据编程语言环境使用客户端模块。

如果您不希望自己处理实用程序,则有许多免费/付费在线服务,其中一些列在下面:


0

PDF生成往往比较棘手。只要发票相对简单,我建议创建一个模板图像文件,并使用imagettftext在其上打印字符串(或任何其他库)。

对于图像文件到PDF的转换,可以使用imagemagick工具套件(只要服务器上有它):

exec('convert -units \'PixelsPerInch\' -density 150 '.$filename.'.png '.$filename.'.pdf');

对我来说,整个方法都很顺利。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接