【发布时间】:2017-03-04 07:10:32
【问题描述】:
我正在尝试从画布中获取 base64 编码的 png 值,该画布是通过使用 Mozilla 的 PDF.JS 库转换 pdf 而创建的。
所以我有一个 base64 编码的 PDF,我将它转换为 HTML 画布。我现在需要将该 HTML 画布转换为 base64 编码的 png 值,我可以将其与正确显示的 HTML img 标记一起使用。
我尝试了 HTMLCanvasElement.toDataURL(),但它没有显示任何内容。我尝试使用相同的方法在画布中绘制一些绿色框,并且效果很好,这意味着转换为画布的 base64 编码 pdf 不想使用该方法。
我尝试过的解决方案是否有任何其他解决方案或解决方法?
**我需要在我的 JS 代码中使用我的 HTML 执行此操作。
function convertDataURIToBinary() {
var raw = window.atob(BASE64 OF PDF);
var rawLength = raw.length;
var array = new Uint8Array(new ArrayBuffer(rawLength));
for(var i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
}
return array;
}
var pdfAsArray = convertDataURIToBinary();
PDFJS.workerSrc = "http://mozilla.github.io/pdf.js/build/pdf.worker.js";
var canvas = _el.querySelector(".insertHere");
PDFJS.getDocument(pdfAsArray).then(function getPdfHelloWorld(pdf) {
pdf.getPage(1).then(function getPageHelloWorld(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
var context = canvas.getContext("2d");
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
canvas = _el.querySelector(".insertHere");
var imgSrc = canvas.toDataURL("image/png");
var img = new Image();
img.src = imgSrc;
_el.querySelector(".insertImageLabel").appendChild(img);
});
});
【问题讨论】:
-
不是一个完美的解决方案,但您可以截取画布的屏幕截图。
-
@UltrasoundJelly 感谢您的建议,但是我需要在我的代码中完成它。我应该澄清一下。
-
你能提供一些示例代码吗?
-
"I had a base64 encoded PDF that I converted into a HTML canvas"- 你是怎么做到的?您不能只将 setImageData 与 base64 编码的 PDF 一起使用,就像您可以将 base64 编码的 mp3 扔到画布上并期望它的可视化一样......
标签: javascript html pdf canvas pdf.js