HTML到PDF与通过PHP以编程方式创建PDF

时间:2009-11-28 13:01:00

标签: php pdf-generation

我有一个PHP应用程序需要生成一些PDF发票和PDF时间表,页面/页脚很好。某些Stackoverflow用户建议使用TCPDF来创建PDF文档。在我的研究中,我发现了两种生成PDF的方法:

1)以编程方式格式化PDF,如下所示:

    $tcpdf->SetFillColor(255, 0, 0);
    $tcpdf->SetTextColor(255);
    $tcpdf->SetDrawColor(128, 0, 0);
    $tcpdf->SetLineWidth(0.3);
    $tcpdf->SetFont('', 'B');

2)将HTML转换为PDF

我如何决定使用哪种方法?

6 个答案:

答案 0 :(得分:3)

我总是建议动态创建PDF,但是基于可以使用最终用户工具编辑的模板,或者至少 - 不必是程序员。在你的情况下,那可能是HTML。对我来说,理想的解决方案是采用Office模板,以编程方式填充值,并在技术上尽可能将其输出为PDF。我使用tbsOOO在PHP中填写办公室模板,并且效果很好。

使用基于模板的方法而不是从头开始生成文档的主要原因:用户可以根据需要设计模板,并且在设计需要更改时不需要。 (并且它需要更改一天。)只有当插入的数据需要以某种方式更改或扩展时,程序员才会发挥作用。这是你背后的巨大工作量。

答案 1 :(得分:2)

我可以根据您的分类推荐Zend_Pdf,这是一种编程方法。

HTML抽象很不错但我不相信你拥有完整的几何绘图API的全部功能和控制。警惕像fpdf这样的库不支持开箱即用的UTF-8,并使用穷人的解析器将HTML转换为PDF。

关于您的申请,我制作了一个生成模板发票的系统。我的用户可以上传由Zend_Pdf提取的PDF模板。然后,此模板将用于生成的发票的每个页面,从而可以轻松进行自定义。

请注意,我的观众主要是能够制作这些模板的平面设计师,因此这是适当的解决方案。如果您的受众只熟悉HTML,那么将HTML转换为PDF可能是最佳方式。

答案 2 :(得分:1)

您好,有两种选择。您可以使用 dompdf ,这样您就可以将文档设计为常规html文档,并使用css进行样式设置。您可以将此文档转换为pdf。我的经历很好。我使用Zend_View渲染一个常规的html页面并将其转换为pdf。这样您就拥有了一个非常灵活的模板,因为您可以在生成html的视图中做出各种显示决策。

→请参阅list of css-compatability

或者您可以使用 livedocx 。这也允许基于模板的方法,但更严格和更少html。 integration for Zend Framework正在进行中。

答案 3 :(得分:1)

我对这三种方法都有丰富的经验:

  1. 使用TCPDF以编程方式创建文档(尽管它是从FPDF派生的,但DOES支持开箱即用的UTF-8)。虽然我是Zend Framework的忠实粉丝,但需要注意的是Zend_Pdf在其功能集中还不够丰富,无法以这种方式使用。

  2. 让图形设计师创建模板,使用Zend_Pdf加载它,然后向其中添加其他内容。 Zend_Pdf(1.10.2 - 1.10.7)在这种情况下工作得相当好,除了试图实例化一个新页面并将其添加到文档中时 - 这引发了大量错误。

  3. 使用htmldoc从HTML转换为PDF。这种方法很糟糕,但主要是由于htmldoc的限制。

  4. 我没有使用TCPDF进行HTML到PDF的转换,但从代码的整体质量来判断,我猜它会做得很好。 (我确实将TCPDF推向极限,包括在RTL字符集,中文等中呈现图形丰富的文档,并且它已经完美地执行了)。因此,如果您决定以编程方式执行此操作,我建议您使用TCPDF,但如果您有一个来自图形设计器的漂亮模板并且打算只在顶部添加内容,则使用Zend_Pdf加载它并从中进行修改是一个合理的选择(尽管你仍然会最终实现自动换行和其他一些基本的东西。)

答案 4 :(得分:0)

我还建议将HTML转换为PDF:

  • 更容易实现
  • 以后更容易更改布局/设计
  • 您可能会重复使用页面的某些HTML

当我为网站创建PDF生成时,我使用了html2ps,然后将postscript转换为pdf。

答案 5 :(得分:0)

我建议使用程序化格式。

在.net世界中,我对html到pdf转换器有着明显的负面体验。它们似乎分为两类:

那些'解析'你的HTML并试图把它变成pdf的人。这些通常缺少一些非常基本的功能,如样式表和支持除基于表格的布局之外的任何东西。

将你的html'打印'成图像并将其粘贴到pdf中的那些。这些实际上可以产生一个体面的文档。它们似乎通过将浏览器链接到库中而导致线程问题和性能不佳。

我有直接pdf apis的平庸经验但是php似乎在这方面有一些明显更好的库。