此包已被弃用且不再维护。作者建议使用symbiote/silverstripe-pdfrendition包。

一个模块,利用Flying Saucer XHTML渲染器项目将XHTML页面转换为PDF。

安装次数: 11,213

依赖项: 0

建议者: 0

安全性: 0

星标: 17

关注者: 3

分支: 10

开放性问题: 6

类型:silverstripe-vendormodule

2.1.1 2021-02-24 01:00 UTC

This package is auto-updated.

Last update: 2024-08-30 07:46:55 UTC


README

维护者联系方式

要求

  • SilverStripe 4.12+ || 5+
  • Tidy(最好是内置的PHP tidy模块,否则为命令行二进制文件)
  • Java 1.8(经过测试的最新版本)
    • 重要:早期1.7版本会导致PDF无法加载Cloudflare特定的资源,如图片和CSS。
    • 重要:无论最终使用哪个版本,在生产环境中上线之前,请确保PDF输出正确(请参阅以下已知问题部分)。

文档

此模块允许用户通过利用HTML和CSS3来定义打印页面布局,轻松创建复杂的内容PDF渲染。它提供了一个简单的扩展,用于自动生成页面PDF渲染,并提供了API以供开发者生成更具体的PDF渲染。

安装说明

composer require symbiote/silverstripe-pdfrendition

概述

  • Symbiote\PdfRendition\Extension\PdfControllerExtension作为扩展添加到PageController中
  • 在模板中添加$PdfLink以插入指向页面PDF版本的链接
  • 要自定义PDF布局,在主题目录中创建一个'pdfrendition.css'文件,使用您首选的方法(@import、requirements等)将其链接起来,并使用@print媒体查询添加针对您的PDF的特定样式。有关如何进行一些常见PDF相关操作的示例,请参阅github wiki。

已知问题/故障排除

  • 在没有有效证书的情况下使用HTTPS可能导致PDF无法正确渲染。
  • Cloudflare可能导致PDF无法正确渲染。
    • 这可能是由于Java尝试引用资源(图像和CSS),并被列为“不良浏览器”。
      • 为了解决这个问题,需要为这些特定的资源(或通用的/*通配规则)添加CloudflarePage Rules,并将Browser Integrity Check设置为Off
    • 这也可能是由于Java版本(请参阅上述内容)。
    • 可以通过在本地截获渲染过程并保留在渲染之前生成的文件来测试PDF输出。
    • 使用此方法,将资产URL替换为您要测试和确认的URL(例如生产环境)。
      • Java Flying Saucer实用程序将通过源中包含的链接检索资产和外部资源。请确保这些链接已完全形成,并且能够在生产服务器中检索到(例如,出站防火墙限制或本地化的DNS/主机定义可能会引起问题)。
    • 使用此/tmp/xhtml,在生产服务器上运行以下内容应该会生成正确渲染的PDF。
    • 如果不正确,则可能是Cloudflare和/或Java的问题。

java -classpath '{project}/pdfrendition/thirdparty/xhtmlrenderer/flying-saucer-core-9.0.7.jar:{project}/pdfrendition/thirdparty/xhtmlrenderer/flying-saucer-pdf-9.0.7.jar:{project}/pdfrendition/thirdparty/xhtmlrenderer/itext-4.2.1.jar' org.xhtmlrenderer.simple.PDFRenderer '/tmp/xhtml' '/tmp/output.pdf'

  • 请确保不要在@media print中定义@font-face。

偶尔页面无法正确渲染,PDF渲染过程失败时,会向浏览器返回一些垃圾信息。通常,这是由于发送给渲染器的XML格式不正确造成的;因此,所有内容首先通过HTML Tidy进行过滤,然而在某些罕见情况下,这仍然无法正确转换原始内容。

在这种情况下,错误将通过发送到您的错误日志文件;它将指示创建的临时文件,因此您应首先检查这些文件中的XML错误。如果不起作用,您还可以尝试使用命令行tidy和PDF渲染的命令行手动进行转换,以查看是否可以获得更多用于调试问题的错误信息。