Anhängen (empfohlen) oder Link zur PDF-Datei hier:
EMG8 -Cambridge Essentail Gold Maths 8-B 117.pdf
Aufbau:
Schritte zum Reproduzieren des Problems:
Was ist das erwartete Verhalten? (Screenshot hinzufügen)
Auf jedem anderen PDF-Reader wird es gut gerendert:
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 🤠
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!
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