Pdf.js: Ошибка при загрузке PDF, использующего системные шрифты

Созданный на 4 февр. 2014  ·  27Комментарии  ·  Источник: mozilla/pdf.js

Тестовый файл: https://dl.dropboxusercontent.com/u/16283445/PORTRAIT.pdf

Файл был создан конвертером Muhimbi PDF.

Основной текст (в котором используется встроенный шрифт Tahoma) отображается нормально; именно пробное сообщение в верхней части файла вызывает ошибку. После некоторой отладки я обнаружил, что это сообщение ссылается на системный шрифт Helvetica, и каким-то образом глифы для него отсутствуют во время ошибки.

Журнал ошибок:

Error: Requesting object that isn't resolved yet Helvetica_path_T pdf.js:205
    at error (http://[skipped]/pdfjs/pdf.js:207:15)
    at Object.PDFObjects_get [as get] (http://[skipped]/pdfjs/pdf.js:4640:9)
    at Object.FontFace.getPathGenerator (http://[skipped]/pdfjs/pdf.js:7675:23)
    at Object.CanvasGraphics.paintChar (http://[skipped]/pdfjs/pdf.js:6105:26)
    at Object.CanvasGraphics_showText [as showText] (http://[skipped]/pdfjs/pdf.js:6291:18)
    at Object.CanvasGraphics_nextLineShowText [as nextLineShowText] (http://[skipped]/pdfjs/pdf.js:6381:12)
    at Object.CanvasGraphics_executeOperatorList [as executeOperatorList] (http://[skipped]/pdfjs/pdf.js:5600:22)
    at Object.InternalRenderTask__next [as _next] (http://[skipped]/pdfjs/pdf.js:4807:39)
    at Object.pdfViewcContinueCallback [as continueCallback] (http://[skipped]/pdfjs/viewer.js:4261:9)
3-pdf-broken 4-font-conversion

Самый полезный комментарий

с набором $ pdfjs-dist": "^2.2.2 disableFontFace: false устранил эту проблему для меня.

pdfjs.getDocument( { url: pdfUrl, disableFontFace: false, }

Все 27 Комментарий

Это не удается, потому что шрифт не загружается, когда мы пытаемся получить его в font_loader.js#L313 .
Проблема, по-видимому, заключается в том, что он вообще никогда не загружается, учитывая evaluator.js#L284 , поскольку в этом случае font.data не определено. Причина этого в том, что рассматриваемый шрифт не имеет встроенного файла шрифта, а это означает, что в fonts.js мы возвращаемся до определения font.data . См. fonts.js#L2256 и fonts.js#L2303 .
Причина, по которой на практике это не является большой проблемой для нас, заключается в том, что это, по-видимому, влияет только на PDF-файлы (например, эта проблема), где ресурс шрифта содержится, например, в словаре XObject .

К сожалению, я не знаю, как мы могли бы решить эту проблему, поскольку сборка font.data без файла шрифта в текущем коде кажется сложной. Возможно, это было бы решено «бесплатно», если бы мы встроили стандартные шрифты в PDF.js?

PS Я также заметил, что исправление этой проблемы затронет один (или два) из файлов, перечисленных в http://bthorben.github.io/pdfRepo/#crashed.

Может ли быть решение, подобное одному из этих:

1 - опция, позволяющая использовать какой-либо шрифт по умолчанию или какой-либо шрифт, который уже использовался для конкретного файла
2 - опция, позволяющая пропустить рендеринг этого элемента
это может помочь продолжить работу с pdf-файлом, если какой-то шрифт отсутствует, и выводить только как предупреждение, а не как критическую ошибку.

Что вы думаете?

Мы предпочитаем первый вариант, однако пока не встраиваем никаких шрифтов и полагаемся на то, что система содержит их для некоторых функций. Мы, конечно, можем игнорировать, как только найдем, как правильно его заглушить (для этих шрифтов мы можем генерировать пустые контуры букв по запросу)

По крайней мере, откройте возможность .catch(...) эту ошибку вместо того, чтобы просто останавливать все, пока вы не найдете лучшее решение. К сожалению, эта проблема нарушает функциональность нашей живой среды, что... плохо.

Доступно ли какое-либо обходное решение? Или какой-то механизм отлова ошибок, предложенный @xwcg ?

Дюп был подан здесь: https://bugzilla.mozilla.org/show_bug.cgi?id=1463728

Всем привет,
У меня такая же ошибка.
Могу ли я узнать, есть ли какое-либо временное решение этой проблемы перед официальным исправлением?

Есть какие-нибудь обновления по этому поводу? Это с 2014 года и до сих пор не решено

@diego-lipinski-de-castro FYI, это слияние # 9809 исправило это, если вы передаете ignoreErrors: true в функцию getDocument. Если вы используете npm pdfjs-dist, он еще не обновлен. Я только что построил из исходного кода, и PDF-файлы, которые раньше жаловались на шрифты, теперь правильно обрабатываются с выводом на холст. Все кажется в порядке.

@sirisian спасибо за ваше обновление. С нетерпением жду релиза

@sirisian вы знаете, когда будет обновление для npm pdfjs-dist? и если есть обходной путь для npm?
Спасибо

Есть ли какие-либо обновления в этом выпуске исправлений для npm pdfjs-dist?

Привет, я тоже столкнулся с этой ошибкой. Есть ли способ заменить шрифт, которого нет в системе, шрифтом по умолчанию?

Привет @timvandermeij , когда мы увидим это исправление в pdfjs-dist?

с набором $ pdfjs-dist": "^2.2.2 disableFontFace: false устранил эту проблему для меня.

pdfjs.getDocument( { url: pdfUrl, disableFontFace: false, }

На мой взгляд, всякий раз, когда pdf.js не может загрузить текст с определенным шрифтом, он должен загружать тот же текст, используя заменяющий шрифт, который он _мог_ показать (например, шрифты по умолчанию, установленные пользователем в настройках шрифта), а не останавливать рендеринг. страницу и выдает ошибку. Это было поведение в Firefox 61 и более ранних версиях, когда параметр «Разрешить страницам выбирать свои собственные шрифты вместо вашего выбора выше» отключен. На мой взгляд, показывать текст замещающим шрифтом лучше, чем вообще ничего не показывать.

с набором $ pdfjs-dist": "^2.2.2 disableFontFace: false устранил эту проблему для меня.

pdfjs.getDocument( { url: pdfUrl, disableFontFace: false, }

Это решило мою проблему, я использую pdfjs-dist ^ 2.0.943
Спасибо

Я работаю над проектом, в котором требуется IE 11, а настройки безопасности (управляемые ИТ-командой) не позволяют загружать пользовательские шрифты. Это приводит к рендерингу PDF, который в основном пуст при рендеринге, показывая только несколько заголовков и курсивных символов.

установка disableFontFace: true приводит к обратному в IE 11 (и фактически во всех других браузерах). Большинство шрифтов затем визуализируются, но это приводит к многочисленным ошибкам, которые выглядят следующим образом:

Warning: getPathGenerator - ignoring character: "Error: Requesting object that isn't resolved yet Times_path_i.".

Все ошибки указывают на разные символы в части Times_path_* сообщения. Документ загружает большую часть содержимого, но заголовки, курсив и другие варианты визуально отсутствуют (хотя пустой текст можно выделить из-за прозрачного текстового слоя сверху)

Итак, я застрял между полным рендерингом шрифтов во всех браузерах, кроме этой управляемой версии IE 11 (из-за принудительного администратором параметра безопасности в отношении шрифтов), или полусломанным рендерингом шрифтов везде из-за попытки внедрить исправление для IE 11.

Какие-либо предложения?

есть новости по этому поводу?

Привет, команда,
Я пробовал все возможные вещи, ничто не может решить проблему.
есть обновления?

Это большое влияние на нас. Почему обходным путем является установка disableFontFace=false? Я так понимаю, что с disableFontFace=true не имеет значения, какие встроенные шрифты есть (или нет) в pdf. Это неправильно?

есть новости по этому поводу?

6 лет назад у @AllSeeingEye возникла проблема, а сегодня в этой библиотеке 594 нерешенных проблемы. Никто не дает аф * об этом баге что ли? Ошибка, которая для меня недопустима, нужно будет искать другие библиотеки, например, pdf-lib.

Всем добрый день!

Столкнулся с некоторыми похожими проблемами при попытке решить проблему рендеринга текстового слоя с параметрами disableFontFace .

На disableFontFace: false некоторые документы выглядят так:
image

В то время как на disableFontFace: true предыдущий документ отображается хорошо, с другим документом возникает проблема:
image

Все эти клетки не были пустыми.
Одни документы хорошо отображаются одним способом, другие — другим.
Как я должен действовать?

У меня такая же проблема, как у @Hatgor
Есть ли исправление или что-то, что можно сделать, чтобы сделать это правильно? Вышеуказанные решения не работают. :|

У меня точно такая же проблема. Попытка запустить его в лямбде на Node12, на котором работает amazonlinux2, что означает отсутствие установленных по умолчанию шрифтов. Было бы ДЕЙСТВИТЕЛЬНО приятно, если бы мы могли встраивать стандартные 14 шрифтов в pdfjs по умолчанию или предоставлять API для их загрузки, а не полагаться на их установку в базовой системе. До сих пор мои попытки установить шрифты в систему были... менее чем успешными.

На данный момент я думаю, что мог бы предварительно обработать каждый PDF-файл с помощью другой библиотеки, например pdf-lib, явно для встраивания 14 стандартных шрифтов, а ЗАТЕМ передать его в эту библиотеку для рендеринга. Немного излишне и раздражает, но если это решит проблему....

После буквально часов работы с amazonlinux2 для установки шрифтов, я МОГУ заставить отображать не включенные шрифты, явно установив для параметра disableFontFace значение false, но затем встроенные шрифты из PDF терпят неудачу с тем же символом, что и в комментарии @Hatgor .

Хорошо, пока нет кубиков в предварительной обработке PDF-файлов для встраивания шрифтов. Возможно, есть способ внедрить шрифт, не встроенный в PDF? Я могу разместить необходимые файлы .ttf в другом месте, но я не вижу ничего в API для загрузки произвольного шрифта.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги