使用 PDF 扩展在 Forge Viewer 中呈现 PDF - pdf.worker.js 抛出警告

Render PDF in Forge Viewer with PDF Extension - pdf.worker.js throws warning

在尝试渲染通过我们自己的 API 提供的 PDF 时,pdf.worker.js 抛出以下警告并且渲染的 PDF 始终保持全白。

我只看到这个(它是一个宽 PDF,但在演示中正确呈现):

我们的客户端应用程序由 angular 提供服务,但我无法完全概括这个问题。使用一个简单的新 angular 应用程序,我能够呈现一个 PDF 文件,由我们的 API 提供,但在我更大的客户端应用程序中,上述错误不断发生,我不知道为什么。

我正在使用此代码加载 PDF,其灵感来自 Autodesk GitHub and this Blog Entry

Autodesk.Viewing.Initializer({ env: 'Development', useADP: false }, () => {
  const viewer = new Autodesk.Viewing.GuiViewer3D(
    document.getElementById('forgeViewer'),
  );
  viewer.start();

  const url =
    'http://api.pdfFileToRender.pdf';

  viewer.loadExtension('Autodesk.PDF').then(() => {
    viewer.loadModel(
      url,
      {},
      model => {
        console.error('Success: ', model);
      },
      (errorCode, errorMessage, errorArgs) => {
        console.error('Error Code: ', errorCode);
        console.error('Error Msg: ', errorMessage);
        console.error('Error Args: ', errorArgs);
      },
    );
    viewer.loadExtension('Autodesk.Viewing.MarkupsCore');
    viewer.loadExtension('Autodesk.Viewing.MarkupsGui');
  });
});

loadModel 函数也调用 onSuccessCallback,我在控制台中看到“成功”。

对我来说,无法将 PDF 扩展集成到我的客户端应用程序中。有谁知道解决方案或对此有提示,我很高兴。

对我来说也很重要,PDF 在本地呈现,不会上传到任何 Forge API。

我使用 Angular 11.2.7 和 Typescript 4.1.5 为客户端应用程序提供服务。我正在使用版本 7.36.0 加载 ForgeViewer,但其他版本也会出现问题。

对于任何感兴趣的人,我都能弄明白。我们自己的应用程序正在定义数组原型函数。然而,这是 pdf.js 的一个问题,它被 Forge 的 PDF 扩展使用。

根本问题是像这样定义数组原型函数:

Array.prototype.myFunction = function(...) {...}

我们要么排除自己的数组函数,要么这样写:

Object.defineProperty(Array.prototype, 'myFunction', {value: function(...) {...})

因此,如果您的应用程序定义了数组原型函数,请使用 Object.defineProperty 或根本不使用它们。这似乎解决了问题。干杯。