【问题标题】:Using pdf.js on a node server在节点服务器上使用 pdf.js
【发布时间】:2017-11-15 03:47:53
【问题描述】:

我想使用 node.js 将 pdf 转换为图像服务器端。我对这个任务的输入是 pdf 的 url,所需的输出是一个 base64 字符串,代表一个图像。

我决定尝试 pdf.js (https://github.com/mozilla/pdf.js) 和 node-canvas (https://github.com/Automattic/node-canvas) - 我的计划是读取 pdf,将其渲染到画布并从画布获取图像的 base64。

但是 pdf.js 在服务器端播放,我创建了一个获取文档任务,如示例中所述:

import pdfjs from 'pdfjs-dist';

const t = pdfjs.getDocument('http://cdn.mozilla.net/pdfjs/helloworld.pdf');
  t.promise.then(function (doc) {
    console.log('got doc');
    console.log(doc);
  })
  .catch(err => {
    console.log(err);
  });

但是什么都没有发生。 Promise 既不会解决,也不会拒绝。我怎样才能解决这个问题并让它发挥作用?我究竟做错了什么?

也许还有另一种解决方案,它可以让我在不将其存储到文件系统的情况下获得转换后的图像的 base 64(到目前为止,我见过的节点的所有 pdf 到图像转换器都将图像保存到驱动器,但这不是所需的行为我)?

【问题讨论】:

  • PDF.js 不知道node.js I/O apis -- 自己下载pdf并使用getDocument({data: updatedData}) 打开PDF
  • @async5 非常感谢!这有帮助。很抱歉打扰您,但我的情况看起来非常相似,但现在使用渲染 api - stackoverflow.com/questions/44800345/… 也许,您有什么想法吗? (节点画布本身工作正常,我已经检查过)
  • @async5 - 虽然 pdf.js 可以选择渲染到节点中的图像,但它非常有限 - 我遇到了很多问题,它没有渲染所有文本(因为它需要画布,而节点的模拟画布并不能完全满足 pdf.js 所需的一切)。如果您考虑在生产环境中使用它,这种方法非常不可靠。

标签: javascript node.js pdf pdf.js


【解决方案1】:

试试这段代码:

https://github.com/mozilla/pdf.js/blob/master/examples/node/pdf2png/pdf2png.js

尝试在异步函数中使用Async/Await

const doc = await pdfjs.getDocument('http://cdn.mozilla.net/pdfjs/helloworld.pdf').promise;

const page = await doc.getPage(1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2018-05-28
    相关资源
    最近更新 更多