大家好,有没有人知道如何通过PHP创建一个漂亮格式的PDF发票?
我希望能够创建一个头部,并在其下列出产品的详细清单,最好使用表格进行排版。我已经在谷歌上快速搜索了一下,发现可以生成PDF文件,但要使其具有良好的样式则需要另行解决。
谢谢。
大家好,有没有人知道如何通过PHP创建一个漂亮格式的PDF发票?
我希望能够创建一个头部,并在其下列出产品的详细清单,最好使用表格进行排版。我已经在谷歌上快速搜索了一下,发现可以生成PDF文件,但要使其具有良好的样式则需要另行解决。
谢谢。
我建议创建一个HTML/CSS的表现形式,以此来生成PDF。有许多应用程序可以处理转换,这里有一个很好的帖子,其中有许多答案:使用PHP将HTML+CSS转换为PDF?
我使用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
完整的代码实在是太长了,不过你应该能够理解,并且你可以获得相当精确的布局控制。
请查看来自Composer的php-pdf-invoice
库。该库已经专门设计用于生成发票,因此易于快速集成!
composer require quickshiftin/php-pdf-invoice
您可以生成类似于此的PDF文件。
README上有一个用法示例。本质上,您需要实现两个接口,一个用于订单,另一个用于订单项。您还可以根据自己的喜好配置字体和颜色。
虽然您可以通过编程方式生成PDF文档,但我们发现最好的方法是仅生成PDF文档的HTML页面,并使用某种工具/服务将HTML转换为PDF。
如果您正在寻找可以托管的应用程序,可以检查以下内容:
如果您不希望自己处理实用程序,则有许多免费/付费在线服务,其中一些列在下面:
PDF生成往往比较棘手。只要发票相对简单,我建议创建一个模板图像文件,并使用imagettftext
在其上打印字符串(或任何其他库)。
对于图像文件到PDF的转换,可以使用imagemagick工具套件(只要服务器上有它):
exec('convert -units \'PixelsPerInch\' -density 150 '.$filename.'.png '.$filename.'.pdf');
对我来说,整个方法都很顺利。