“=12=”和PDF,“=11=”,“=10=”
Canvas to PDF, HTML, Konva.js
我正在研究 Konva 舞台上的可拖动对象。我想将 canvas 对象层转为 PDF。我使用 toDataURL。像这样;
var stage = new Konva.Stage({
container: 'container',
width: width,
height: height,
id: 'stage',
});
var grid_layer = new Konva.Layer();
var object_layer = new Konva.Layer();
stage.add(grid_layer);
stage.add(object_layer);
function updateScreen() {
object_layer.batchDraw()
}
function downloadURI(uri, name) {
var link = document.createElement('a');
link.download = name;
link.href = uri;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
delete link;
}
document.getElementById('save').addEventListener(
'click',
function() {
var dataURL = stage.toDataURL({ pixelRatio: 3 });
downloadURI(dataURL, 'stage.png');
},
false
);
保存没有对象的按钮作品并保存canvas图像。但是当我 运行 舞台上有对象的代码时,页面重新加载并且按钮不起作用。不保存 canvas 图片
我强烈建议按照 Konva Wiki 中所示的方式进行操作。
// Code form KonvaJS wiki
var pdf = new jsPDF('l', 'px', [stage.width(), stage.height()]);
pdf.setTextColor('#000000');
// first add texts
stage.find('Text').forEach((text) => {
const size = text.fontSize() / 0.75; // convert pixels to points
pdf.setFontSize(size);
pdf.text(text.text(), text.x(), text.y(), {
baseline: 'top',
angle: -text.getAbsoluteRotation(),
});
});
// then put image on top of texts (so texts are not visible)
pdf.addImage(
stage.toDataURL({ pixelRatio: 2 }),
0,
0,
stage.width(),
stage.height()
);
pdf.save('canvas.pdf');
这会将所有文本和其他对象添加到 pdf 中。
从评论中,我可以得出结论,您没有使用用于 konva 内容的服务器托管图像。您无法从您的网站访问图像,因为它们不是来自同一来源。这有助于保护您计算机上的文件免受类似您的网站的访问。因此,您必须将图像移动到服务器并从那里访问它们。
我正在研究 Konva 舞台上的可拖动对象。我想将 canvas 对象层转为 PDF。我使用 toDataURL。像这样;
var stage = new Konva.Stage({
container: 'container',
width: width,
height: height,
id: 'stage',
});
var grid_layer = new Konva.Layer();
var object_layer = new Konva.Layer();
stage.add(grid_layer);
stage.add(object_layer);
function updateScreen() {
object_layer.batchDraw()
}
function downloadURI(uri, name) {
var link = document.createElement('a');
link.download = name;
link.href = uri;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
delete link;
}
document.getElementById('save').addEventListener(
'click',
function() {
var dataURL = stage.toDataURL({ pixelRatio: 3 });
downloadURI(dataURL, 'stage.png');
},
false
);
保存没有对象的按钮作品并保存canvas图像。但是当我 运行 舞台上有对象的代码时,页面重新加载并且按钮不起作用。不保存 canvas 图片
我强烈建议按照 Konva Wiki 中所示的方式进行操作。
// Code form KonvaJS wiki
var pdf = new jsPDF('l', 'px', [stage.width(), stage.height()]);
pdf.setTextColor('#000000');
// first add texts
stage.find('Text').forEach((text) => {
const size = text.fontSize() / 0.75; // convert pixels to points
pdf.setFontSize(size);
pdf.text(text.text(), text.x(), text.y(), {
baseline: 'top',
angle: -text.getAbsoluteRotation(),
});
});
// then put image on top of texts (so texts are not visible)
pdf.addImage(
stage.toDataURL({ pixelRatio: 2 }),
0,
0,
stage.width(),
stage.height()
);
pdf.save('canvas.pdf');
这会将所有文本和其他对象添加到 pdf 中。
从评论中,我可以得出结论,您没有使用用于 konva 内容的服务器托管图像。您无法从您的网站访问图像,因为它们不是来自同一来源。这有助于保护您计算机上的文件免受类似您的网站的访问。因此,您必须将图像移动到服务器并从那里访问它们。