При рендеринге PDF-файла, созданного PDFCreator 0.9.x. Я заметил, что он содержит ошибку в сопоставлении символов. Теперь ошибка в файле PDF не вызывает удивления, Acrobat творит чудеса при отображении неисправных файлов PDF, поэтому многие генераторы PDF создают PDF-файлы, которые не полностью соответствуют стандарту PDF.
Я пытаюсь создать небольшой файл примера: http://test.continuit.nl/temp/Document.pdf
На одной странице отображается один глиф (заглавная буква A) с помощью команды Tj (см. поток 5 0 obj). Выбранный шрифт (7 0 obj) содержит шрифт с одним встроенным глифом. Все идет нормально. На char ссылается char #1. Учитывая кодировку шрифта, он содержит часть различий: [ 1 /A ]. Таким образом, char 1 -> символ /A. Теперь во встроенном шрифте подмножества есть cmap, который не соответствует глифу в символе 65 (например, заглавной A). Раздел cmap шрифта определяет символ в точном порядке в файле PDF Font -> Encoding -> Differences массив.
Похоже, что сопоставление/кодирование символов выполняется дважды. Похоже, затронуты только файлы из PDFCreator 0.9.x.
Мой вопрос: правильно ли это (или я сделал ошибку и правильный ли PDF) и что бы вы сделали, чтобы обнаружить эту ситуацию, чтобы решить проблему рендеринга.
Примечание. Мне нужно иметь возможность отображать эти PDF-файлы.
Решение
В файле ISO32000 есть примечание, что символические шрифты TrueType (в дескрипторе шрифта установлен бит 3) кодировка не разрешена, и вы должны ИГНОРИРОВАТЬ ее, всегда используя простую кодировку 1 на 1. В общем, если это символический шрифт, я полностью игнорирую объект Encoding, и это решает проблему.