Pdf.js: Schlecht gerenderte Times New Roman PS

Erstellt am 22. März 2019  ·  3Kommentare  ·  Quelle: mozilla/pdf.js

Anhängen (empfohlen) oder Link zur PDF-Datei hier:
EMG8 -Cambridge Essentail Gold Maths 8-B 117.pdf

Aufbau:

  • Webbrowser und seine Version: Chrome 73
  • Betriebssystem und seine Version: * Macos 10.14.1 *
  • PDF.js-Version: 2.2.91
  • Ist eine Browsererweiterung: Nein

Schritte zum Reproduzieren des Problems:


  1. Öffnen Sie das PDF (es ist eine einzelne Seite, die aus einem Buch extrahiert wurde) und sehen Sie sich die schlecht gerenderten Schriftarten an

image

Was ist das erwartete Verhalten? (Screenshot hinzufügen)
Auf jedem anderen PDF-Reader wird es gut gerendert:
image

Link zu einem Viewer (sofern auf einer anderen Website als mozilla.github.io/pdf.js oder als Firefox/Chrome-Erweiterung gehostet):
Aktueller github-Seiten-Viewer: https://mozilla.github.io/pdf.js/web/viewer.html

Anmerkungen:
Wir haben es geschafft, dass es funktioniert, indem wir die Schriftarten in der PDF-Datei bearbeitet haben. Es ist derzeit "Times New Roman PS", ein erneutes Rendern mit nur "Times New Roman" scheint das Problem zu beheben.

Es gibt keine Konsolenfehler oder andere sichtbare Anzeichen für Lösungen wie fehlende CMaps.

Leider ist es uns nicht gestattet, PDFs zu ändern, daher ist das erneute Rendern jedes einzelnen keine praktikable Lösung.

Wenn jemand dazu einen Einblick und eine mögliche Lösung geben kann, wäre das sehr dankbar 🤠

4-font-conversion

Hilfreichster Kommentar

Das PDF definiert die gleichen Schriftarten viele Male. Zum Beispiel ist die Schriftart LULQLP+TimesLTStd-Roman neunmal definiert. Jeder verweist auf denselben FontDescriptor und denselben eingebetteten CFF-Datenstrom.

Es gibt eine Font-Hash-Berechnung in PartialEvaluator.prototype.preEvaluateFont() in core/evaluator.js. Es fügt dem Hash die Einträge Encoding, ToUnicode und Widths hinzu. Einige Schriftarten im PDF erhalten identische Hashcodes, da alle genannten Einträge identisch sind, sogar Breiten. Nur die Einträge FirstChar und LastChar unterscheiden sich. Wenn Schriftarten identische Hash-Codes erhalten, kann dies dazu führen, dass eine Schriftart übersprungen wird, sodass sie nicht in OpenType konvertiert wird?

Hier ist ein verkleinertes PDF, das zwei Schriftarten aus dem Original-PDF enthält
Ausgabe10665_reduziert.pdf

Alle 3 Kommentare

Das PDF definiert die gleichen Schriftarten viele Male. Zum Beispiel ist die Schriftart LULQLP+TimesLTStd-Roman neunmal definiert. Jeder verweist auf denselben FontDescriptor und denselben eingebetteten CFF-Datenstrom.

Es gibt eine Font-Hash-Berechnung in PartialEvaluator.prototype.preEvaluateFont() in core/evaluator.js. Es fügt dem Hash die Einträge Encoding, ToUnicode und Widths hinzu. Einige Schriftarten im PDF erhalten identische Hashcodes, da alle genannten Einträge identisch sind, sogar Breiten. Nur die Einträge FirstChar und LastChar unterscheiden sich. Wenn Schriftarten identische Hash-Codes erhalten, kann dies dazu führen, dass eine Schriftart übersprungen wird, sodass sie nicht in OpenType konvertiert wird?

Hier ist ein verkleinertes PDF, das zwei Schriftarten aus dem Original-PDF enthält
Ausgabe10665_reduziert.pdf

Es gibt eine Font-Hash-Berechnung in PartialEvaluator.prototype.preEvaluateFont() in core/evaluator.js. Es fügt dem Hash die Einträge Encoding, ToUnicode und Widths hinzu. Einige Schriftarten im PDF erhalten identische Hashcodes, da alle genannten Einträge identisch sind, sogar Breiten. Nur die Einträge FirstChar und LastChar unterscheiden sich.

Wirklich ausgezeichnete Analyse, danke; Dadurch war der Fehler leicht zu beheben!

Wenn Schriftarten identische Hash-Codes erhalten, kann dies dazu führen, dass eine Schriftart übersprungen wird, sodass sie nicht in OpenType konvertiert wird?

In einigen schlecht generierten PDF-Dateien können riesige Mengen identischer Schriftarten vorhanden sein, und der Zweck von preEvaluateFont war einfach, das Laden/Parsen doppelter Schriftarten zu vermeiden. Daher wird loadFont hash vergleichen und wenn möglich eine bereits geladene/geparste Schriftart verwenden.
Offensichtlich hängt dies alles davon ab, dass die hash es tatsächlich korrekt/eindeutig sind, aber glücklicherweise gab es im Laufe der Jahre relativ wenige Fehler in diesem Code.

Das ist super vielen Dank für die Hilfe!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen