Pdf.js: Erro ao carregar PDF que usa fontes do sistema

Criado em 4 fev. 2014  ·  27Comentários  ·  Fonte: mozilla/pdf.js

Arquivo de teste: https://dl.dropboxusercontent.com/u/16283445/PORTRAIT.pdf

O arquivo foi produzido pelo conversor de PDF Muhimbi.

O texto principal (que usa a fonte Tahoma incorporada) é renderizado corretamente; é a mensagem de teste no topo do arquivo que causa o erro. Após alguma depuração, descobri que esta mensagem faz referência à fonte Helvetica do sistema e, de alguma forma, os glifos estão ausentes no momento do erro.

Registro de erros:

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

Comentários muito úteis

com pdfjs-dist": "^2.2.2 set disableFontFace: false corrigiu esse problema em mim.

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

Todos 27 comentários

Isso falha porque a fonte não é carregada quando tentamos buscá-la em font_loader.js#L313 .
O problema parece ser que ele nunca é realmente carregado, dado evaluator.js#L284 , já que font.data é indefinido neste caso. A razão para isso é que a fonte em questão não possui um arquivo de fonte incorporado, o que significa que em fonts.js retornamos antes de definir font.data . Consulte fonts.js#L2256 e fonts.js#L2303 .
A razão pela qual este não é um problema maior na prática para nós, é que ele só parece afetar PDFs (como este problema) onde o recurso de fonte está contido dentro, por exemplo, de um dicionário XObject .

Infelizmente, não sei como poderíamos resolver esse problema, pois construir font.data sem um arquivo de fonte parece difícil no código atual. Talvez isso fosse resolvido "de graça" se incorporássemos as fontes padrão no PDF.js?

PS Também notei que corrigir esse problema resolveria um (ou dois) dos arquivos listados em http://bthorben.github.io/pdfRepo/#crashed.

Pode haver uma solução como uma destas:

1 - opção para permitir usar alguma fonte padrão ou alguma fonte que já foi usada para o arquivo exato
2 - opção para permitir pular renderização deste item
isso pode ajudar a continuar o trabalho com o arquivo pdf se alguma fonte estiver ausente e a saída apenas como aviso, não como erro de quebra.

O que você acha?

Preferimos a primeira opção, porém ainda não incorporamos nenhuma fonte e contamos com o sistema para contê-las para algumas funções. Certamente podemos ignorá-lo, uma vez que descobrimos como rascunhar corretamente (para essas fontes, podemos gerar contornos de letras vazias quando solicitados)

Pelo menos abra a possibilidade de .catch(...) esse erro ao invés de simplesmente parar tudo até encontrar uma solução melhor. Infelizmente, esse problema interrompe a funcionalidade em nosso ambiente ao vivo, o que é... ruim.

Existe alguma solução alternativa disponível? Ou algum tipo de mecanismo de captura de erros sugerido por @xwcg ?

Olá pessoal,
Eu tenho o mesmo erro.
Posso saber se há alguma solução temporária para esse problema antes da correção formal?

Alguma atualização sobre isso?, É de 2014 e ainda não foi resolvido

@diego-lipinski-de-castro FYI, essa mesclagem # 9809 corrigiu isso se você passar ignoreErrors: true na função getDocument. Se você usar o npm pdfjs-dist, ele ainda não está atualizado. Acabei de criar a partir da fonte e PDFs que costumavam reclamar de fontes agora processam corretamente com a saída da tela. Tudo parece bem.

@sirisian obrigado por sua atualização. Aguardando o lançamento

@sirisian você sabe quando será a atualização do npm pdfjs-dist? e se houver uma solução alternativa para o npm?
Obrigado

Alguma atualização nesta versão de correção para npm pdfjs-dist ?

Olá, também encontro esse erro. Existe uma maneira de substituir a fonte que não está presente no sistema por uma padrão?

Oi @timvandermeij quando é provável que vejamos essa correção em pdfjs-dist ?

com pdfjs-dist": "^2.2.2 set disableFontFace: false corrigiu esse problema em mim.

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

Na minha opinião, sempre que o pdf.js falha ao carregar o texto em uma fonte específica, ele deve carregar o mesmo texto usando uma fonte substituta que _poderia_ mostrar (por exemplo, as fontes padrão definidas pelo usuário nas preferências de fonte), em vez de parar de renderizar a página e lançar um erro. Esse era o comportamento no Firefox 61 e anteriores quando a opção "Permitir que as páginas escolham suas próprias fontes, em vez de suas seleções acima" está desativada. Na minha opinião, mostrar o texto em uma fonte substituta é melhor do que não mostrar nada.

com pdfjs-dist": "^2.2.2 set disableFontFace: false corrigiu esse problema em mim.

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

Este resolveu meu problema, estou usando pdfjs-dist ^2.0.943
Obrigada

Estou trabalhando em um projeto em que o IE 11 é um requisito e as configurações de segurança (gerenciadas pela equipe de TI) não permitem o download de fontes personalizadas. Isso resulta em uma renderização de PDF que fica principalmente em branco durante a renderização, mostrando apenas alguns títulos e caracteres em itálico.

definir disableFontFace: true causa o inverso no IE 11 (e em todos os outros navegadores na verdade). A maioria das fontes é renderizada, mas apresenta erros de litania, que se parecem com isso:

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

Todos os erros indicam caracteres diferentes na parte Times_path_* da mensagem. O documento carrega a maior parte do conteúdo, mas os títulos, itálico e outras variações estão visualmente ausentes (embora o texto vazio possa ser selecionado devido à camada de texto transparente na parte superior)

Portanto, estou preso entre ter renderização de fonte completa em todos os navegadores, exceto esta versão gerenciada do IE 11 (devido à configuração de segurança imposta pelo administrador em relação às fontes) ou renderização de fonte semi-quebrada em todos os lugares devido à tentativa de implementar uma correção para o IE 11.

Alguma sugestão?

alguma noticia sobre isso?

Oi equipe,
Eu tentei todas as coisas possíveis, nada pode resolver o bug.
tem alguma atualização?

Este é um grande impacto para nós. Por que a solução alternativa é definir disableFontFace=false? Meu entendimento é que com disableFontFace=true, não importa quais fontes incorporadas existem (ou não) no pdf. Isso é incorreto?

alguma noticia sobre isso?

6 anos atrás @AllSeeingEye estava tendo um problema e hoje esta biblioteca tem 594 problemas não resolvidos. Ninguém dá a mínima para esse bug ou o quê? Um bug que não é para mim, precisará procurar outras bibliotecas como pdf-lib talvez.

Bom dia a todos!

Enfrentei alguns problemas semelhantes ao tentar resolver o problema de renderização da camada de texto com os parâmetros disableFontFace .

Em disableFontFace: false alguns documentos são assim:
image

Enquanto em disableFontFace: true o documento anterior renderiza bem, há um problema com um documento diferente:
image

Todas essas células não estavam vazias.
Alguns documentos renderizam bem de uma maneira, alguns - de outra maneira.
Como devo agir?

Estou tendo um problema semelhante ao @Hatgor
Existe uma correção ou algo que pode ser feito para acertar isso? As soluções acima não funcionam. :|

Estou tendo exatamente o mesmo problema. Tentando executá-lo em um lambda no Node12, que executa o amazonlinux2 - o que significa que não há fontes instaladas por padrão. Seria MUITO bom se pudéssemos embutir as 14 fontes padrão em pdfjs por padrão, ou expor uma API para carregá-las em vez de depender delas sendo instaladas no sistema base. Até agora meus esforços para instalar as fontes no sistema foram... menos que bem sucedidos.

Neste ponto, estou pensando em pré-processar todos os PDFs com outra biblioteca, como pdf-lib, explicitamente para incorporar as 14 fontes padrão, ENTÃO passá-lo para esta biblioteca para renderização. Um pouco excessivo e chato, mas se resolver o problema....

Depois de mexer por horas literais com amazonlinux2 para instalar fontes, POSSO fazer com que as fontes não incluídas sejam renderizadas definindo disableFontFace como false explicitamente, mas as fontes incorporadas do PDF falham com o mesmo símbolo visto no comentário de @Hatgor .

OK, até agora não há dados no pré-processamento de PDFs para incorporar fontes. Existe, talvez, uma maneira de injetar uma fonte que não está incorporada no PDF? Posso hospedar os .ttf(s) necessários em outro lugar, mas não estou vendo nada na API para carregar uma fonte arbitrária.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

brandonros picture brandonros  ·  3Comentários

kleins05 picture kleins05  ·  3Comentários

jigskpatel picture jigskpatel  ·  3Comentários

anggikolo11 picture anggikolo11  ·  3Comentários

hp011235 picture hp011235  ·  4Comentários