2012-12-12 83 views
11

我已经有一个PDF生成的问题,目前我的系统使用dompdf将HTML转换为PDF,这一切工作正常。但是,如果用户插入大于A4页面的图像,则PDF会严重歪斜,大图像下方的所有内容会聚拢在一起或根本不显示。dompdf图像溢出问题

这里有两个PDF文件,显示问题的例子

这一次是罚款

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

这一个你可以与第一图像是比A4页的所有内容大见当它应该与前一个相同时,下面的内容会被搞砸。

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

我会非常喜欢做的是打破了图像分为部分和跨越它跨越多页的要求。就像这个LaTeX solution完成的一样。用dompdf做这件事有没有可能?或任何其他PHP库的HTML到PDF?

我已经研究过它自己,显然如果它的大于A4页面,我可以将图像切碎。但问题出在那种需要知道页面上是否存在文本的方法,或者是类似的东西,所以它不那么简单。

谢谢大家提前。任何有识之士将非常感激。

+2

这是不是一个直接的解决方案,但你可以考虑切换到另一个基于HTML的PDF生成器。我使用webkit的'wkhtmltopdf'祝你好运。这意味着您可以使用CSS甚至Javascript来处理正在呈现的页面内容。例如,您可以根据预期的视口测量图像,然后根据需要调整大小。我不会保证调整大小的质量,当然... – Charles

+0

什么是DOMPDF版本?我有一个类似的问题,最新的测试版为我做了窍门。 –

+0

这是0.6.0 beta 3这是最新的,但我会尝试从github拉绝对最新版本。 –

回答

4

这将我更多,如果你发布你有帮助的HTML和CSS ... 得到记住两两件事:

选项#1

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

选项#2

我之前的dompdf但发现wkhtmltopdf后的大风扇永不回头。 wkhtmltopdf是一款让工作做得对的惊人工具。要尝试此解决方案做到以下几点:从project home page

  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');

+0

交换到wkhtmltopdf的伎俩。感谢Alex。 –

1

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

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

当页面会打破?如果包含100个图像。如果溢出div或溢出A4纸,我需要打破。 – 151291