При просмотре PDF в Forge Viewer не удается отобразить 2D-модель, созданную TEKLA - Не удалось сопоставить шрифт Arial - PullRequest
0 голосов
/ 17 апреля 2019

Я работаю над средством просмотра PDF, начиная с примера, опубликованного Майклом Билом https://forge.autodesk.com/blog/fast-pdf-viewingmarkup-inside-forge-viewer. Он отлично работает с большим количеством документов разного типа.Моя проблема заключается в том, что при загрузке более 2-х моделей 2d, экспортируемых TEKLA в формате PDF, в первый раз это работает хорошо, но на консоли не отображается следующее сообщение:

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")
      });
    });

Вы можете найти файл PDF здесь github

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Да, это определенно ошибка!

хорошо, поэтому я добавил два ваших 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)

0 голосов
/ 18 апреля 2019

Протестировано с Viewer v6.5 и, к сожалению, не удалось воспроизвести проблемы - см. Пример в реальном времени здесь .

Единственное предупреждение, которое я получил, касалось неразрешимых путей шрифта:

Предупреждение: getPathGenerator - игнорирование символа: «Ошибка: запрос объекта, который еще не разрешен Helvetica_path_g».

EDIT:

Чтобы загрузить другое:

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

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

Согласитесь, однако, это следует обрабатывать более изящно, чтобы вы могли сразу же загрузить еще один PDF, так что давайте подождем, пока наш проект вернется. А пока вы можете использовать то, что я предложил, в качестве обходного пути.

...