【问题标题】:PDF output directly, or via HTML file [closed]直接或通过 HTML 文件输出 PDF [关闭]
【发布时间】:2014-01-24 05:19:28
【问题描述】:

这是我的情况。我有一个运行测试(Selenium、Perl 和许多自定义代码)的设备测试平台。结果当前输出到任何浏览器都可以显示的 HTML 文件中。这是一个包含许多大表的长页面(全页宽度和多页,但一行小于一页)。问题是这个页面不是很好地可打印。我还没有找到一个遵守所有 CSS3 指令的浏览器,特别是在奇数页面上开始标题(仅适用于 IE10+)和 not 跨页面拆分表格行。我还想用前导点扩展目录并自动填充页码。页眉页码和安全页脚工作正常。如果有一个 浏览器 可以从 HTML 中干净地打印出来,那将是令人满意的。

无论如何,我的客户都在询问他们是否可以获得 PDF 格式的输出。环顾四周,我看到一些 HTML 到 PDF 的转换器,但它们要么工作不那么好,要么价格昂贵,要么需要安装服务器(用于 PHP),要么位于其他人的站点上(我们担心发送我们的专有信息异地转换)。生成的 PDF 应该相当简单:没有输入或表单、没有加密、一些 PNG 或 JPEG 图像、一些文本颜色以及大量表格和文本。所有页面链接都在文档中——丢失它们是可以的。只有一些“标准”字体。谁能建议一些选择?命令行界面很好(实际上是首选,因此可以从脚本运行)。我尝试从 Chrome 直接输出 PDF,结果不理想(我可以配置页面大小、比例等吗?)。

我愿意从原始文本和数据生成 PDF(即,不通过 HTML 文件作为中间形式)。可以使用我当前的 Perl 代码的库将是首选,以最大限度地减少重写(PDF::Create 有多好?)。我看到一些基于 PHP 的库,但是是否可以在没有服务器的情况下使用 PHP? (此处不允许服务器安装)非常重要的是,在 first 位置输出到 HTML 的全部意义在于我不必计算字符和行长并适合页面——让浏览器会处理所有这些。是否有一个库可以输出 PDF 来为我处理所有文书工作?

无论采用何种解决方案,它至少需要在 Windows 上运行(Linux 也可以)。非常感谢您的建议!

【问题讨论】:

    标签: html perl pdf


    【解决方案1】:

    在 CPAN 上进行快速检查,看起来 PDF::Create 和 PDF::API2 都应该做你想做的事情,尽管这两个模块似乎都提供了对 PDF 功能的某种低级访问,你可能会觉得很难使用除非您对如何完成页面布局有具体的想法。幸运的是,PDF::API2 有许多帮助模块,可以使表格布局和自动文本流等事情更容易处理。以下是有关该主题的一些相关 StackExchange 链接(响应中包含示例代码),您可能会觉得有帮助...

    What's the best method to generate Multi-Page PDFs with Perl and PDF::API2?

    How can I make PDF tables from Perl?

    How to add header, footer with images using PDF::API2::Lite?

    至于在 Windows 和 UNIX 上工作,我只是在我的桌面上使用 CPAN 安装程序(ActivePerl 5.16.3 MSWin32-x86-multi-thread)快速检查并安装了 PDF::API2,所以在理论上,它应该假设你被允许在某个地方安装所需的模块,你也可以在 Windows 上工作。

    您的里程可能会有所不同。

    【讨论】:

    • 谢谢,瑞克。我今天一直在玩 PDF::API2 和 PDF::Table,但它们似乎并不相处融洽。也许我用错了,但 Table 似乎没有将当前页面和位置等信息传递给 API2。例如,我基本上合并了他们的两个演示(SYNOPSIS 部分),但文本出现在第 1 页而不是当前页面 (3),并且是一长行。我会查看您的链接,看看它们是否提供任何线索。我无法安装 PDF::API2::Simple,它提供“自动流”文本和 x & y 位置。
    • 我不确定 PDF::API2 和 PDF::Table 是否能很好地搭配使用,但我认为我看到了 PDF::API2::Simple 的问题。这是需要首先安装 Module::Install (和依赖项)的模块之一,这在 Windows 上可能会很痛苦。另一种方法是进入 PDF::API2::Simple 的 CPAN 临时构建目录(“C:\Tools\Perl\cpan\build\PDF-API2-Simple-1.1.4-oBKMNB\lib\PDF\API2”在我的系统上)并手动将“Simple.pm”文件复制到您的 Perl\site\lib\PDF\API2 目录。由于这个模块没有二进制依赖,这应该没问题,尽管这并不理想。
    • 我安装了 Module::Install,但安装 PDF::API2::Simple 在某种 dmake 测试中很早就失败了(dmake 确实 似乎已安装)。按照您的手动复制说明,我现在可以轻松工作。我现在必须回去做一些“真正的”工作:(,但我会尽快重新摆弄这个。我仍然希望有人提出一些从 HTML 或生成的 PDF 获取的好建议从头开始,这样我就可以避免重新发明轮子。感谢您的宝贵时间!
    • 我认为 PDF::API2::Simple 可能足以完成我需要的大部分工作(感谢 Rick,提供有关如何使其工作的信息)。还有一些问题:1)有没有办法避免两次通过填写前向引用,例如TOC页码和每页上的“Page M of N”?是否有可能走到最后,然后以某种方式跳回到较早的页面并更新它们? 2) pages 方法是否仅在关闭输出 PDF 文件后可用? 3) 什么是 current_page 方法?它返回一个对象——里面有什么用处?我可以通过其他方式跟踪当前页面。 (续)
    • (cont) 4) 如果更改文本属性(字体、大小、颜色等),它是全局更改(永久)。有没有办法将其本地化为一个 text() 方法调用?如果没有,我会考虑添加一个新参数来本地化它。 5) text() 方法将 x,y 留在下一行的开头。有没有办法将 x,y 留在行的下一个点(例如,将一个单词更改为斜体,然后继续)?我对处理这个问题的新参数有一些想法。最后,我将考虑将 PDF::Table(或受其启发的代码)集成到 Simple 中,并将其提供给 RedTree 以供公众使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多