使用PHP将HTML转换为PDF(不是PDF格式的HTML)

时间:2009-09-10 07:27:14

标签: php html pdf pdf-generation

我是一名PHP开发人员,在我的一个项目中,我需要将一些HTML文档(大约30到50页)转换为PDF文档。

我的搜索提出了以下可能的解决方案。其中包括一些PHP库和一些命令行应用程序。每个都有自己的优点和缺点。

PHP库:

  1. fpdf(需要更多努力才能转换)
  2. tcpdf(需要更多努力才能转换)
  3. html2fpdf http://html2fpdf.sourceforge.net
  4. html2pdf http://html2pdf.fr/
  5. dompdf http://code.google.com/p/dompdf/(与其他相比,效果很好)
  6. 对于每个图书馆,我都有以下问题:

    1. 需要很长时间(转换30个HTML页面超过五分钟)
    2. 需要太多资源(内存和时间)

      (我在php.ini中设置了以下参数:

      max_execution_time = 600
      memory_limit = 250M

      但事情仍然无效。)

    3. 需要格式良好的HTML页面(例如没有遗漏的关闭标签)

    4. 当我尝试转换简单的HTML文档(五个或更少的CSS,只有很少的CSS)时,所有这些工作

      命令行应用

      与上述库相比,所有命令行应用程序都能完美而快速地运行,但只有在我直接在控制台上运行它们时才能运行。当我尝试在PHP exec()system()中使用它们时,它们会给我错误。

      以下是我在PHP中运行它们时的命令行应用程序及其错误:

      1. html2pdf(http://www.tufat.com/s_html2ps_html2pdf.htm

          

        html2pdf:11380):Gtk-WARNING **:无法打开显示:: 0.0
          没有指定协议

      2. wkhtmltopdf

          

        载入页面:10%
          载入页面:33%
          载入页面:100%
          等待重定向
          输出页面
          QPainter :: begin():返回false
          QPainter :: begin():返回false
          QPainter :: save:画家不活跃
          QPainter :: scale:画家不活跃
          QPainter :: setRenderHint:画家必须处于活动状态才能设置渲染提示
          QPainter :: setBrush:画家不活跃
          QPainter :: pen:画家不活跃
          QPainter :: setPen:画家不活跃

      3. htmltopdf(http://www.ultrashareware.com/html-to-pdf.htm

      4. 所以现在我正在寻求帮助。任何人都可以回答:

        哪种PHP库在我的案例中运作良好?

        为什么在命令行应用程序中会出现这些错误?

8 个答案:

答案 0 :(得分:7)

关于 wkhtmltopdf

  • 这个东西非常快,它也可以处理你抛出的各种HTML / CSS,所以当你需要速度时,你应该严格考虑它。我们最近在我们公司切换到它,我们的PDF服务得到了极大的速度提升。

  • 至少在Linux下它需要安装XOrg库 - 服务器通常没有它们,所以这可能是你的问题。

答案 1 :(得分:2)

试试这个:

答案 2 :(得分:1)

您是否尝试过Prince

答案 3 :(得分:0)

但是,如果您将使用任何在线服务并通过HTTP发送您的HTML内容怎么办? 当然,大部分都不是免费的。

答案 4 :(得分:0)

一种可能性:自动编写脚本:

  1. 访问网页
  2. 在网络浏览器中打开该页面
  3. 使用该页面的屏幕截图
  4. 将其变为PDF
  5. 第4步很简单 - 有很多PHP / cmdline库可以让你将图像放到pdf上或转换它们(例如,fpdf。)

    对于步骤1-3 ......您可以尝试查看此处的代码:http://browsershots.org/。不确定它是否相关 - 似乎需要大量的设置。也许他们的架构可以运作?

答案 5 :(得分:0)

有几个问题和建议:

  • 您真的需要将其转换为PDF吗?为什么?在某些情况下,坚持使用HTML会更好。
  • 升级生成PDF的服务器的硬件是一个选项吗?我问过这个问题,因为如果您尝试过的所有库都需要很长时间才能创建,那么您唯一的选择就是升级服务器。
  • 您可能希望使用命令行错误解决问题。如果它能提供最快的结果,那就找一个合适的工作。

答案 6 :(得分:0)

尝试使用HTMLDOC命令行工具项目https://www.msweet.org/projects.php?Z1

答案 7 :(得分:0)

有很多解决方案可以将HTML转换为PDF,我可以通过https://grabz.it向您推荐。

有一个灵活的PHP API,可以由cronjobs或直接从PHP网页使用。

如果您想尝试一下,首先应该获得app key + secret授权和development free SDK

以下是基本实现的示例。

//First init
include("GrabzItClient.class.php");

// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" values for your account!
$grabzIt = new GrabzItClient("Application Key", "Application Secret");

// To take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");

// To save in case public callback handler is available
$grabzIt->Save("http://www.example.com/handler.php");   
// OR To save in case public callback handler is not available,
// it's a synchonous method can be usedthe will force your application to wait 
// while the screenshot is created
$filepath = "images/result.jpg";
$grabzIt->SaveTo($filepath);    

可以获得其他类型的屏幕截图,例如image screenshot and etc