【发布时间】:2022-10-24 18:38:25
【问题描述】:
所以我正在尝试记录打印多个织物图像。以下是准备过程。我看到一个空白窗口。我可以根据要求提供更多信息。我可能错过了某种异步逻辑?
1-我从每个画布对象初始化画布(循环画布数组 - 每个画布对象都有一个图像,可能还有多个文本框对象)
2-然后我使用 toDataURL() 并为每个创建图像元素,将 src 附加到 img
3-我遍历图像并将它们附加到 printWindow。
const handleCustomPrint = () => {
const div = document.querySelector('.print-content');
for (let i = 0; i < canvasArrayToBePrinted.length; i++) {
const canvas = new fabric.Canvas(`${i}`)
canvas.loadFromJSON(canvasArrayToBePrinted[i], () => {
const img = canvas.toDataURL({
format: 'jpeg',
quality: 0.75
});
const singleImg = `<img src=${img} class='image-content' />`
div.innerHTML += singleImg;
});
}
console.log(div);
var windowUrl = 'about:blank';
var uniqueName = new Date();
var windowName = 'Print' + uniqueName.getTime();
var printWindow = window.open(windowUrl, windowName, 'left=50000,top=50000,width=1000000,height=10000');
printWindow.document.write(div.innerHTML);
printWindow.document.close();
printWindow.onload = function() {
printWindow.focus();
printWindow.print();
printWindow.close();
}
return true;
};
编辑:好的。我想我已经接近了。但还是什么都看不到。
这是 console.log(div) 的输出
<div class="print-content">
<img src="data:image/jpeg;base64,/9j/4AAQSkZJ..." class="img-content"/>
<img src="data:image/jpeg;base64,/9j/4AAQSkZJ..." class="img-content"/>
</div>
这是用于定位打印样式的 CSS
@media all {
.img-content {
display: none !important;
}
.print-content {
display: none !important;
}
}
@media print {
.print-content {
display: block !important;
}
.img-print {
display: block !important;
}
}
【问题讨论】:
-
请问是不是图片的问题。如果您只包含文本框,它是否有效?
-
@JohnM您的意思是省略toDataURL()。并从画布中删除图像对象?
-
我的意思是从画布上删除任何图像对象
-
@JohnM 我在 react-to-print 的帮助下用不同的方法解决了这个问题(它允许我打印反应组件) - 图像转换结果是无用的。我在画布数组上循环,为循环中的每个数据创建画布,然后触发 document.print
标签: javascript reactjs canvas printing fabricjs