我已经安装了laravel 5.6并安装了barryvdh / laravel-dompdf软件包。我使用了一些jQuery图表插件在刀片文件上显示图表,效果很好。通过使用dompdf包,我试图在pdf上显示此饼图,但图表未在pdf上显示。如何在pdf上显示图表,是否有解决方案在pdf上显示图表?
在刀片文件上查看时,图表插件/库显示以下图表:
https://symfony.com/blog/new-in-symfony-3-4-local-service-binding
我正在尝试在流式/下载的pdf上显示此图表
代码如下:
控制器代码:
tEsTiNg tEsTiNg
pdf.blade.php代码:
public function generate_pdf(){
$data = [
'foo' => 'bar'
];
//return view('pdf');
$pdf = PDF::loadView('pdf', $data);
return $pdf->stream('document.pdf');
}
答案 0 :(得分:0)
这是一个经典问题。它会影响许多不同的工具,而不仅仅是dompdf。至少涉及三个问题:
服务器端工具可以使用生成的HTML,但不能通常无法运行Javascript。它将HTML和CSS解释为好像是禁用了Javascript的浏览器一样,因此jQuery和许多其他Javascript库根本无法工作,因此无法捕获客户端生成的任何图形。
客户端工具可以在所有Javascript(jQuery或其他语言)完成后运行。但是,还有其他问题...
有多种方法可以在浏览器中呈现图形。老式的方法是在服务器上生成图形,然后将jpg或png图像下载到浏览器中。但是,它不提供动态图表(无论如何也不容易),详细的鼠标悬停操作等。因此,大多数站点现在都使用SVG或其他客户端系统。所有(或几乎所有)当前的浏览器都支持SVG,因此它已在很大程度上取代了较旧的方法。 SVG(以及较旧的方法)不容易捕获以呈现为PDF或其他文档。结果,即使在客户端系统中,您通常也会遇到图形将出现的“漏洞”。
在生成客户端SVG图表时,所有内容的大小均取决于您的屏幕分辨率。如果您确实设法用HTML捕获了该图表,则文本将是高分辨率的(因为它是文本,并且可以被视为具有可缩放字体的PDF中的文本),但是图形将限于原始绘制的分辨率。这适合临时使用,但在高质量打印机上打印时可能无法达到所需或期望的质量。典型的屏幕分辨率为〜100dpi,典型的打印机分辨率为〜200dpi-300dpi(等级更高,但从实际角度出发,以200dpi或更高的分辨率呈现彩色图像通常令人满意,除了艺术品质的照片外。)
到目前为止,我找到的最好的解决方案是使用虚拟或“无头”浏览器来创建一切-运行Javascript并与HTML和CSS一起生成SVG输出。然后将输出捕获为高分辨率图像,以插入到PDF中。您可以使用任何服务器端框架/工具包/等。进行捕获并创建PDF。
有免费的开源软件包。可能最受欢迎的是PhantomJS,但我刚刚检查了一下,它目前已归档/未激活。我已经使用了它并且它起作用了,但是有很多问题。
还有各种可用的服务。我目前使用的是URLBox.io。我对此没有任何个人兴趣,只是一个非常满意的客户。它包括用于将图像保存到Amazon S3的选项(取决于订阅类型),或者您可以在本地捕获。对我而言,最重要的是您可以设置非常高的分辨率,以使捕获的图像看起来真的很棒。我主要将其用于自动将网页图像插入PDF。