Dompdf 将画布转换为 pdf

Posted

技术标签:

【中文标题】Dompdf 将画布转换为 pdf【英文标题】:Dompdf convert canvas to pdf 【发布时间】:2016-05-27 18:12:13 【问题描述】:

我正在尝试使用填充有画布元素的 Dompdf 打印 PDF。

我可以毫无问题地包含和打印 png 图像,但是当尝试包含画布然后将其转换为 png 时,它不会在导出的 PDF 中显示它(没有损坏的图像等)。

怎么办?

这是一个 Codeigniter 项目:

使用 Dompdf 在控制器中加载视图:

$this->load->library('pdf');
$this->pdf->load_view('print_pdf', $data);
$this->pdf->render();
$this->pdf->stream("new_pdf_file.pdf");

要打印的视图:

<!doctype and so on..>

<canvas id="myCanvas"  ></canvas>

<script>
   context.beginPath();
   context.moveTo(170, 80);
   context.bezierCurveTo(130, 100, 130, 150, 230, 150);
   context.closePath();
   context.lineWidth = 5;
   context.fillStyle = '#8ED6FF';
   context.fill();
   context.strokeStyle = '#0000ff';
   context.stroke();

   var canvas = document.getElementById("myCanvas");
   var img = canvas.toDataURL("image/png");

   $(document).ready(function() 
      $('<img />',  
         src: img
      );
      img.appendTo($('#testDiv'));
   );
</script>

<div id="testDiv">

</div>

<../html>

【问题讨论】:

【参考方案1】:

DomPDF is a HTML to DOM to PDF 解析器不是成熟的网络浏览器。

事情不一定总是按预期工作,渲染可能存在差异。

如果画布与您提供的示例一样简单,则无需使用 javascript 制作 - 只需将其保存为 png 并包含 &lt;img src=""/&gt;

如果在画布上生成的图片更复杂,并且依赖于传递给视图的$data - 可能是这种情况 - 那么您仍然可以选择使用 php 生成 SVG (查看内联 PHP 或在控制器中并使用 $data 传递)。

如果 SVG 不是一个选项,那么您可以使用 PHP GD(或其他库)生成图像并将其保存在临时位置(并将文件包含在 src="path/to/file.png" 中)或将图像转换为数据 URI 并嵌入它在视图中。

就个人而言,根据经验,我不会在视图中使用比简单的 CSS 和旧的纯 HTML 更复杂的东西

【讨论】:

以上是关于Dompdf 将画布转换为 pdf的主要内容,如果未能解决你的问题,请参考以下文章

将画布转换为 PDF

如何在 dompdf 中应用引导样式

CodeIgniter+Bootstrap - 将 HTML 转换为 PDF

在 Codeigniter 中使用外部 CSS 支持将 HTML 转换为 PDF

CSS 不适用于 DOMPDF

如何在 laravel 中将 HTML 转换为 PDF? [关闭]