Pdf.js: Times New Roman PS mal renderizado

Criado em 22 mar. 2019  ·  3Comentários  ·  Fonte: mozilla/pdf.js

Anexe (recomendado) ou Link para o arquivo PDF aqui:
EMG8 -Cambridge Essentail Gold Maths 8-B 117.pdf

Configuração:

  • Navegador da web e sua versão: Chrome 73
  • Sistema operacional e sua versão: * Macos 10.14.1 *
  • Versão PDF.js :
  • É uma extensão do navegador: Não

Etapas para reproduzir o problema:


  1. Abra o PDF (é uma única página extraída de um livro) e veja as fontes mal renderizadas

image

Qual é o comportamento esperado? (adicionar captura de tela)
Em qualquer outro leitor de PDF, ele funciona bem:
image

Link para um visualizador (se hospedado em um site diferente de mozilla.github.io/pdf.js ou como extensão do Firefox / Chrome):
Visualizador de páginas do github atual: https://mozilla.github.io/pdf.js/web/viewer.html

Notas:
Conseguimos fazê-lo funcionar editando as fontes no PDF. Atualmente é "Times New Roman PS", re-renderizando-o apenas com "Times New Roman" parece consertá-lo.

Não há erros de console ou quaisquer outros sinais visíveis de soluções, como CMaps ausentes.

Infelizmente, não temos permissão para alterar PDFs, portanto, renderizar novamente cada um não é uma solução viável.

Se alguém puder dar qualquer ideia sobre isso e uma possível solução, isso seria muito apreciado 🤠

4-font-conversion

Comentários muito úteis

O PDF define as mesmas fontes muitas vezes. Por exemplo, a fonte LULQLP+TimesLTStd-Roman é definida nove vezes. Cada um se refere ao mesmo FontDescriptor e ao mesmo fluxo de dados CFF incorporado.

Há um cálculo de hash de fonte em PartialEvaluator.prototype.preEvaluateFont() em core / avaliador.js. Ele adiciona entradas Encoding, ToUnicode e Widths no hash. Algumas fontes no PDF obtêm códigos hash idênticos porque todas as entradas mencionadas são idênticas, até mesmo larguras. Apenas as entradas FirstChar e LastChar diferem. Se as fontes obtiverem códigos hash idênticos, isso pode fazer com que uma fonte seja ignorada de forma que não seja convertida para OpenType?

Aqui está um PDF reduzido que contém duas fontes do PDF original
issue10665_reduced.pdf

Todos 3 comentários

O PDF define as mesmas fontes muitas vezes. Por exemplo, a fonte LULQLP+TimesLTStd-Roman é definida nove vezes. Cada um se refere ao mesmo FontDescriptor e ao mesmo fluxo de dados CFF incorporado.

Há um cálculo de hash de fonte em PartialEvaluator.prototype.preEvaluateFont() em core / avaliador.js. Ele adiciona entradas Encoding, ToUnicode e Widths no hash. Algumas fontes no PDF obtêm códigos hash idênticos porque todas as entradas mencionadas são idênticas, até mesmo larguras. Apenas as entradas FirstChar e LastChar diferem. Se as fontes obtiverem códigos hash idênticos, isso pode fazer com que uma fonte seja ignorada de forma que não seja convertida para OpenType?

Aqui está um PDF reduzido que contém duas fontes do PDF original
issue10665_reduced.pdf

Há um cálculo de hash de fonte em PartialEvaluator.prototype.preEvaluateFont() em core / avaliador.js. Ele adiciona entradas Encoding, ToUnicode e Widths no hash. Algumas fontes no PDF obtêm códigos hash idênticos porque todas as entradas mencionadas são idênticas, até mesmo larguras. Apenas as entradas FirstChar e LastChar diferem.

Análise realmente excelente, obrigado; isso tornou o bug fácil de corrigir!

Se as fontes obtiverem códigos hash idênticos, isso pode fazer com que uma fonte seja ignorada de forma que não seja convertida para OpenType?

Em alguns arquivos PDF mal gerados, pode haver grandes quantidades de fontes idênticas, e o objetivo de preEvaluateFont era simplesmente evitar ter que carregar / analisar fontes duplicadas. Portanto, loadFont comparará hash es e, se possível, usará uma fonte já carregada / analisada.
Obviamente, tudo isso depende do fato de que hash es são realmente corretos / únicos, mas felizmente houve relativamente poucos bugs nesse código ao longo dos anos.

Isso é incrível, muito obrigado pela ajuda!

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

Questões relacionadas

jigskpatel picture jigskpatel  ·  3Comentários

timvandermeij picture timvandermeij  ·  4Comentários

liuzhen2008 picture liuzhen2008  ·  4Comentários

azetutu picture azetutu  ·  4Comentários

THausherr picture THausherr  ·  3Comentários