dompdf图片溢出问题

11

我目前使用dompdf将HTML转换为PDF时有问题。如果用户插入的图像大于A4页面,则PDF会出现严重问题,所有在大图像下面的内容都被挤在一起或根本不显示。

以下是两个PDF文件,展示了此问题的例子:

这一个没问题:

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

在这一个PDF中,你可以看到第一张图比A4页面大,之后的所有内容都会被弄乱,而应该与上一个PDF相同:

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

我希望能够将图像分成多个部分,并跨越尽可能多的页面。就像这个LaTeX解决方案所实现的那样。是否有任何可能使用dompdf或其他执行HTML到PDF转换的PHP库来做到这一点?

我自己进行了研究,我可以对大图像进行裁剪,但是问题在于需要事先知道页面上是否有文本或其他内容,因此这并不那么简单。

提前感谢您的帮助。非常感激任何见解。


2
这不是一个直接的解决方案,但你可以考虑切换到另一个基于HTML的PDF生成器。我用过wkhtmltopdf,效果很好,它使用webkit。这意味着在渲染页面时,你可以使用CSS甚至Javascript来操作页面内容。例如,你可以测量图像与期望视口的大小,然后根据需要进行调整大小。当然,我不能保证调整大小的质量... - Charles
DOMPDF的版本是多少?我遇到了类似的问题,最新的beta版本为我解决了这个问题。 - AKS
这是0.6.0 beta 3版本,虽然我会尝试从github拉取最新的版本。 - Mark Davidson
如果图像大小大于A4大小,则要修复图像大小以显示(或)调整图像大小。 - Daya
@MarkDavidson 期待看到一些源HTML,这样我们就能够看到dompdf在这个文档中失败的地方。 - BrianS
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');


1

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

<div style='page-break-after:always;'>
    <img src="PATH_TO_IMAGE" />
</div>

当页面包含100张图片时,它会分页吗?如果div溢出或A4纸张溢出,我需要分页。 - 151291

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接