javascript - 从 PDF.JS pdf 转换为 Canvas 标签获取 base64 png?

标签 javascript html pdf canvas pdf.js

我正在尝试从 Canvas 中获取 Base64 编码的 png 值,该 Canvas 是通过使用 Mozilla 的 PDF.JS 库转换 pdf 创建的。

所以我有一个 base64 编码的 PDF,我将其转换为 HTML Canvas 。我现在需要将该 HTML Canvas 转换为 base64 编码的 png 值,我可以将其与正确显示的 HTML img 标签一起使用。

我尝试了 HTMLCanvasElement.toDataURL(),但它没有显示任何内容。我尝试使用相同的方法在 Canvas 上绘制一些绿色框,效果很好,这意味着转换为 Canvas 的 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);

      });
    });

最佳答案

您没有等待 render() 返回的 promise 来完成异步操作。请参阅https://github.com/mozilla/pdf.js/blob/master/examples/learning/prevnext.html#L76如何等待完成:

  ...
  var renderTask = page.render(renderContext);
  // Wait for rendering to finish
  renderTask.promise.then(function () {
    // Page rendered, now take snapshot.
  });
  ...

关于javascript - 从 PDF.JS pdf 转换为 Canvas 标签获取 base64 png?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40185691/

相关文章:

javascript - nodejs 网络服务器 "undefined is not a function"

javascript - 使用mapReduce在mongodb中检索总和以及计数

c# - iTextSharp 生成的 PDF : How to send the pdf to the client and add a prompt?

html - css margin 似乎指的是主体而不是父级?

javascript - 我将 selenium webdriver 2.53.1 与 java 和 firefox 45.0.1 一起使用,并尝试使用隐藏类的 linktext(打开弹出窗口)登录

python - 如何在 Reportlabs 中将内容继续到下一页 - Python

c++ - 使用纯 C/C++ 添加注释到 PDF

javascript - 在三元运算符 '&&' 和 '||' 上使用 ('?' 和 ':' 有什么区别)?

JavaScript String.Replace() 不起作用

具有动态用户输入的 HTML5 Canvas