在Forge Viewer上进行PDF查看无法显示由TEKLA创建的2D模型-无法映射字体Arial

时间:2019-04-17 18:22:48

标签: autodesk-forge

我正在从Michael Beale https://forge.autodesk.com/blog/fast-pdf-viewingmarkup-inside-forge-viewer发布的示例开始研究PDF查看器。 它适用于大量不同种类的文档。 我的问题是,首次加载TEKLA导出的PDF时,加载的2d模型不止一次,但以下失败在控制台上显示错误:

font-engine.js:51 Failed to map font Arial
value @ font-engine.js:51
value @ font-engine.js:59
value @ LmvCanvasContext.js:594
paintChar @ pdf.js:11506
showText @ pdf.js:11635
executeOperatorList @ pdf.js:11037
(anonymous) @ pdf.js:9541
_next @ pdf.js:9537
(anonymous) @ pdf.js:9528
requestAnimationFrame (async)
_scheduleNext @ pdf.js:9527
_continue @ pdf.js:9520
operatorListChanged @ pdf.js:9510
_renderPageChunk @ pdf.js:8503
(anonymous) @ pdf.js:9026
_onComObjOnMessage @ pdf.js:12705
path2d.js:676 Uncaught (in promise) TypeError: Cannot read property 'triangulationFailed' of null
    at d.fill (path2d.js:676)
    at e.value (LmvCanvasContext.js:531)
    at e.value (LmvCanvasContext.js:595)
    at e.paintChar (pdf.js:11506)
    at e.showText (pdf.js:11635)
    at executeOperatorList (pdf.js:11037)
    at pdf.js:9541
    at new Promise (<anonymous>)
    at t._next (pdf.js:9537)
    at pdf.js:9528

这是代码片段:

function initializeViewer(pdf) {
    if (viewer) {
      console.log('loading');
      viewer.impl.unloadCurrentModel()
      if (markup) 
        markup.hide();
      viewer.loadModel(pdf, viewer);
      return;
    }

    var options = {
        env: "Local",
        useConsolidation: true,
        useADP: false,
    }

    Autodesk.Viewing.Initializer(options, () => {
      viewer = new Autodesk.Viewing.Private.GuiViewer3D(document.getElementById('forgeViewer'));
      viewer.setTheme("light-theme");
      viewer.start();
      if (!pdf) return;


      viewer.loadExtension('Autodesk.PDF').then( () => {
            viewer.loadModel(pdf, viewer);
            viewer.loadExtension("Autodesk.Viewing.MarkupsCore")
            viewer.loadExtension("Autodesk.Viewing.MarkupsGui")
      });
    });

您可以在github

中找到一些PDF文件

有什么主意吗?

2 个答案:

答案 0 :(得分:0)

使用Viewer v6.5进行了测试,不幸的是无法重现这些问题-请参见实时示例here

我得到的唯一警告是关于无法解决的字体路径:

  

警告:getPathGenerator-忽略字符:“错误:正在请求尚未解决的对象Helvetica_path_g”。

编辑:

要加载另一个:

viewer.finish(); 
Autodesk.Viewing.theExtensionManager.unregisterExtension('Autodesk.PDF');

viewer = new Autodesk.Viewing.Private.GuiViewer3D(myViewerDiv);
...//reinitialize and load the PDF again

但是,请妥善处理此问题,以便您可以立即立即加载另一个PDF,因此让我们等待工程返回。同时,您可以使用我现在建议的解决方法。

答案 1 :(得分:0)

是的,那绝对是一个错误!

好的,所以我在示例页面中添加了两个PDF(bug1.pdf和bug2.pdf)

演示:https://wallabyway.github.io/offline-pdf-markup/

为什么会破裂...

当加载第二个PDF时,我的代码将先前的PDF撕了下来,但是看起来它在内存中留下了一些东西。

我尝试了三种拆卸技术...

  1. unloadModel()
  2. viewer.tearDown()
  3. 从头开始完全初始化查看器(删除第39-46行)

但是...“这些都不起作用” !!

源代码:https://github.com/wallabyway/offline-pdf-markup

所以...

查看控制台错误,似乎那些图形具有一些复杂的路径重叠,这对于“ Poly2Tri”库而言过于棘手,从而导致其失败。不幸的是,它随后在内存中留下了一些东西,并且在随后的加载尝试中无法正确加载。

我已记录了一个错误(LMV-4525)