HTML tables to PDF in PHP - neither DOMPDF nor html2ps/pdf are working
现在最长的时间是我一直试图将包含大表的HTML页面转换为PHP。这些使用CSS设置样式,可以长达几页。
我首先尝试了DOMPDF。效果很好,直到文档超过一页为止。我找到的所有修复程序均无效。要么出错,要么将甚至部分位于第二页的元素混入到第1页的内容中。我已经尝试了最新版本和今天签出的SVN副本。
我还尝试了html2ps / pdf,即使该目录是完全可写的,它也会向我写入"缓存被拒绝"错误。系统要求测试脚本通过。服务器正在IIS下运行PHP 5(不是我的选择,呵呵)。
可以说服其中任何一个工作,还是有一个图书馆可以工作?
演示/测试脚本中的错误:
Warning: file_put_contents(C:\Inetpub\wwwroot\JM\pdf\html2ps\cache/7d888258e9745b3716532ea81342daaf.css.compiled) [function.file-put-contents]: failed to open stream: Permission denied in C:\Inetpub\wwwroot\JM\pdf\html2ps\css.cache.class.php on line 33
Warning: fopen(C:\Inetpub\wwwroot\JM\pdf\html2ps\cache/unicode.lb.classes.dat) [function.fopen]: failed to open stream: Permission denied in C:\Inetpub\wwwroot\JM\pdf\html2ps\inline.content.builder.php on line 991
Warning: flock() expects parameter 1 to be resource, boolean given in C:\Inetpub\wwwroot\JM\pdf\html2ps\inline.content.builder.php on line 992
Warning: fwrite(): supplied argument is not a valid stream resource in C:\Inetpub\wwwroot\JM\pdf\html2ps\inline.content.builder.php on line 1011(此错误重复数千次)
Warning: fopen(C:\Inetpub\wwwroot\JM\pdf\html2ps\cache/times.z) [function.fopen]: failed to open stream: Permission denied in C:\Inetpub\wwwroot\JM\pdf\html2ps\pdf.fpdf.makefont.php on line 318
Can't write to file C:\Inetpub\wwwroot\JM\pdf\html2ps\cache/times.z
我个人建议使用命令行应用程序,而不要使用任何PHP库。
原因:
PHP库需要更多的时间和内存(缓存)来进行转换。
他们只需要格式正确的HTML页面,否则会引发错误或警告。
不支持外部样式表。
命令行工具:
如果您在Linux服务器上运行脚本,则建议使用命令行工具。
原因:
与PHP库相比,它们非常快。
支持CSS。
接受格式不正确的HTML。
使用哪个命令行工具?
wkhtmltopdf
htmltopdf
html2pdf
有关更多信息,请参阅使用PHP将HTML转换为PDF(而非PDF转换为HTML)。
在IIS下讨论了html2pdf的类似问题。
解决方案很简单,但很奇怪。如果这对您没有帮助,则完整的错误消息和/或少量代码将帮助我为您提供帮助。
-
那似乎是指较旧的版本。我的版本不使用该目录;它的缓存目录与其他目录位于同一个位置(以及类,演示等)。甚至演示/测试脚本也无法使用任何URL。病态的我不得不用错误更新我的帖子,因为它的评论太长。
-
如果缓存目录中还有文件,您是否尝试将其清空? html2pdf不能很好地处理"剩菜剩饭"。
-
仅附带它的readme.txt。删除那并没有帮助。即使我的FTP客户端声称目录是可写的,目录也可能不可写(属性666)?
-
由于您(被迫)使用Windows,因此您可能要检查目录的属性。检查在其中运行Web服务器的上下文的用户的文件夹属性的"安全性"-选项卡中是否具有"完全控制权"。它应类似于该图片中" Internet Guest Account"的设置:tinyurl.com/pdtzkq
-
显然我没有足够的权限执行此操作,因此我在config.inc.php的第115行中更改了缓存目录:define(CACHE_DIR,sys_get_temp_dir());这似乎已经做到了。