我正在尝试使用填充了canvas元素的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" width="578" height="200"></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>
答案 0 :(得分:0)
DomPDF is a HTML to DOM to PDF解析器不是一个完整的Web浏览器。
事情并不总是按预期工作,渲染可能会有所不同。
如果画布会像您提供的示例一样简单,则无需使用javascript创建它 - 只需将其保存为包含<img src=""/>
的png
如果画布上生成的图片更复杂并且依赖于$data
传递给视图 - 可能就是这种情况 - 那么您仍然可以选择使用PHP来生成SVG(查看内联PHP或控制器并与$data
一起传递)。
如果SVG不是一个选项,那么您可以使用PHP GD(或其他库)生成图像,并将其保存在临时位置(并将文件包含在src="path/to/file.png"
中)或将图像转换为数据URI并将其嵌入视图中。
就个人而言,根据经验,我不会在视图中使用比简单的CSS和旧的纯HTML更复杂的东西