PHP创建PDF发票

Posted

技术标签:

【中文标题】PHP创建PDF发票【英文标题】:PHP create PDF invoice 【发布时间】:2011-08-20 08:36:33 【问题描述】:

您好,有人知道我如何通过 php 创建格式精美的 PDF 发票吗?

理想情况下,我正在寻找带有标题的东西,然后是带有某种表格的产品的逐项列表。在快速谷歌之后,我会对生成 PDF 感到满意,但尝试很好地设置它的样式完全是另一回事。

谢谢

【问题讨论】:

你遇到过 FPDF 吗?我之前研究过……看起来工作量很大,但很有希望 是的,现在看看 - 非常好的教程:web-development-blog.com/archives/… 我建议查看actualreports.com,它们是一个API 和一个基于浏览器的文档编辑器,用于创建不同的模板。请注意,他们收取服务费。 专为发票设计的 PDF 生成器 - packagist.org/packages/quickshiftin/php-pdf-invoice 【参考方案1】:

我建议创建一个 html / css 表示您想要 PDF 的内容并使用它来生成 PDF。有几十个应用程序来处理转换,这里有一个很好的线程有很多答案:Convert HTML + CSS to PDF with PHP?

【讨论】:

感谢您的回答 +1。这听起来确实是一个很好的解决方案,它将帮助将来考虑这个问题的人,但是对于我的情况,我需要使用 cron 每月生成一些发票。这就是为什么我没有选择你的答案正确的原因。 我之前做过一些PDF生成,真的很痛苦。使用 HTML 进行设计要容易得多,您已经知道并可以像 Timothy 所说的那样进行转换。我能想到手动生成它们的唯一原因是如果您需要控制分页符。【参考方案2】:

为此,我使用 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

坦率地说,完整的代码太长了,无法在此处插入,但您应该明白这一点,并且您会获得相当精确的布局控制。

【讨论】:

如果你已经在使用phpExcel,它有内置的库(所以你可以直接调用类)【参考方案3】:

您可能想查看 html2Pdf。它是一个基于 FPDF 的 php 类,它允许您从 HTML 创建 PDF 文件。因此,只需使用 html 格式化您的文本,然后创建其 pdf。它非常灵活,可以提供更好的控制。

SourceForge Link

【讨论】:

【参考方案4】:

查看 composer 的 php-pdf-invoice 库。该库已经为生成发票而设计,因此可以轻松快速地集成!

composer require quickshiftin/php-pdf-invoice

您可以生成如下所示的 PDF 文件

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

【讨论】:

【参考方案5】:

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

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

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

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

【讨论】:

【参考方案6】:

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

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

wkhtmltopdf - 使用 webkit 将 html 渲染为 pdf。有一些注意事项可以正常工作。 PhantomJS - 已停产,我不建议使用它。 Headless Chrome - 最重要的是,它本身并不是一个解决方案。根据您的编程语言环境,您需要一个客户端模块。

如果您不想自己处理该实用程序,有很多免费/付费的在线服务,其中一些列在下面:

PDF Layer(已测试 - 良好) Restpack(已测试 - 良好) DocRaptor HTMLPDFAPI HTML to PDF Rocket

【讨论】:

以上是关于PHP创建PDF发票的主要内容,如果未能解决你的问题,请参考以下文章

无需为订阅开具发票 - 在审核购买时创建发票

php 以编程方式创建发票

向 NetSuite PDF 发票添加超链接?

使用PHP将带有样式(css)的html转换为pdf

C# WPF发票打印

使用 Java 创建 PDF [重复]