11

我在生成 PDF 时遇到了问题,目前我的系统正在使用 dompdf 将 HTML 转换为 PDF,这一切都很好。但是,如果用户插入的图像大于 A4 页面,则 PDF 会严重损坏,并且大图像下方的所有内容都会聚集在一起或根本不显示。

这里有两个 PDF 来展示这个问题的一个例子

这个不错

https://dl.dropbox.com/u/65878041/OK.pdf

这个你可以看到,第一张图片比 A4 页面大,后面的所有内容都被搞砸了,当它应该与前一个相同时。

https://dl.dropbox.com/u/65878041/Issue.pdf

我最理想的做法是将图像分成几部分,并根据需要跨越多个页面。就像在这个LaTeX 解决方案中完成的一样。有没有可能用 dompdf 做到这一点?或任何其他用于将 HTML 转换为 PDF 的 PHP 库?

我自己研究过了,很明显,如果它比 A4 页面大,我可以切掉一张图片。但是问题在于这种方法需要事先知道页面上是否有文本或类似的东西,所以它不是那么简单。

谢谢大家。任何见解将不胜感激。

4

2 回答 2

5

如果您发布 html 和 css,我会更有帮助...记住两件事:

选项1

尝试将图像包装在附加的 DIV 中并明确设置宽度和溢出规则。

选项 #2

在我是一个大粉丝之前,dompdf但在发现之后wkhtmltopdf再也没有回头。wkhtmltopdf是一种出色的工具,可以正确完成工作。要尝试此解决方案,请执行以下操作:

  1. 从项目主页下载静态二进制文件,它是特定于架构的,所以选择正确的......你可以同时下载;在运行时检测架构并加载适当的二进制文件
  2. 将文件放在项目可访问的某个目录中,例如
    /path/to/my/proj/bin/wkhtmltopdf
  3. 运行您的脚本并生成 html 文档;将其保存到某个 tmp 文件中
    file_put_contents('/tmp/myfile.html', $html);
  4. 运行转换命令
    shell_exec('/path/to/my/proj/bin/wkhtmltopdf /tmp/myfile.html /tmp/myfile.pdf')
  5. 获取生成的 pdf 的内容,更改响应标头并服务器文件:
    header('Content-Type: application/pdf');

    echo file_get_contents('/tmp/myfile.pdf');

于 2012-12-24T02:20:18.880 回答
1

我不知道图像是如何显示的,但您可以告诉 dompdf 在某个元素之后或之前拆分页面。例如:

<div style='page-break-after:always;'>
    <img src="PATH_TO_IMAGE" />
</div>
于 2012-12-19T12:23:43.103 回答