Aspose::Pdf::PdfASymbolicFontEncodingStrategy класс
PdfASymbolicFontEncodingStrategy class
Этот класс описывает правила, которые могут быть использованы для настройки процесса копирования данных кодирования в случаях, когда символический шрифт TrueType имеет более одной кодировки. Некоторые PDF‑документы после преобразования в формат PDF/A могут выдать ошибку "More than one encoding in symbolic TrueType font’s cmap". В чем причина этой ошибки? Все символические шрифты TrueType имеют специальную таблицу "cmap" во внутренних данных. Эта таблица отображает коды символов в индексы глифов. Таблица может содержать различные субтаблицы кодировок, описывающие используемые кодировки. См. расширенную информацию о таблицах cmap на https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6cmap.html. Обычно таблица cmap содержит несколько субтаблиц кодировок, но стандарт PDF/A требует, чтобы в документе PDF/A для данного шрифта оставалась только одна субтаблица кодировки или среди субтаблиц шрифта присутствовала субтаблица (3,0). Ключевой вопрос здесь — какие данные необходимо взять из других субтаблиц для копирования в целевую таблицу кодировки (3,0)? Большинство шрифтов имеют «well-formed» таблицы cmap, где каждая субтаблица полностью согласована с другими. Однако у некоторых шрифтов таблицы cmap содержат конфликты — например, одна субтаблица имеет индекс глифа 100 для Unicode 100, а другая — индекс 200 для того же Unicode 100. Для решения этих проблем требуется специальная стратегия. По умолчанию используется следующая стратегия: ищется mac‑субтаблица (1,0). Если она найдена, только её данные используются для заполнения целевой таблицы (3,0). Если mac‑субтаблица не найдена, то перебираются все субтаблицы, кроме (3,0), и их данные копируются в целевую субтаблицу (3,0). При этом сопоставление каждого Unicode (Unicode, индекс глифа) копируется в целевую таблицу только если в ней пока нет этого Unicode. Таким образом, если первая субтаблица имеет индекс глифа 100 для Unicode 100, а следующая — индекс 200 для того же Unicode 100, будет скопировано только значение из первой субтаблицы (Unicode=100, индекс глифа=100). Каждая предыдущая субтаблица имеет приоритет перед следующей. Свойства этого класса PdfASymbolicFontEncodingStrategy помогают настроить поведение по умолчанию. Если свойство PreferredCmapEncodingTable типа QueueItem::CMapEncodingTableType установлено, соответствующая субтаблица будет использоваться в приоритете перед mac‑субтаблицей (1,0). Значение ‘MacTable’ из перечисления QueueItem::CMapEncodingTableType не имеет смысла в данном случае, так как указывает на ту же mac‑субтаблицу (1,0), которая используется по умолчанию. Свойство CmapEncodingTablesPriorityQueue отбрасывает все приоритеты для любой субтаблицы. Если это свойство установлено, будут использованы только субтаблицы из объявленной очереди в указанном порядке. Если указанные субтаблицы не найдены, будет применена стандартная итерация всех субтаблиц и стратегия копирования, описанная выше. Объект QueueItem указывает используемую субтаблицу кодирования. Эта субтаблица может быть задана комбинацией членов (PlatformID, PlatformSpecificId) или через перечисление QueueItem::CMapEncodingTableType. В случае, когда у шрифта нет субтаблицы (3,0), будет использована другая субтаблица для поддержания совместимости с PDF/A. Выбор субтаблицы осуществляется по тем же правилам, что описаны ранее, так что свойства PreferredCmapEncodingTable и CmapEncodingTablesPriorityQueue используются для определения результирующей субтаблицы, и если у шрифта нет запрошенной субтаблицы(й), будет использована любая существующая субтаблица.
class PdfASymbolicFontEncodingStrategy : public System::Object
Nested classes
- Class QueueItem
Методы
| Метод | Описание |
|---|---|
| get_CmapEncodingTablesPriorityQueue() const | Указывает очередь субтаблиц кодирования для обработки. |
| get_PreferredCmapEncodingTable() const | Указывает субтаблицу, которая будет использоваться в приоритете перед mac‑субтаблицей (1,0). Значение ‘MacTable’ из перечисления QueueItem::CMapEncodingTableType не имеет смысла в данном случае. |
| PdfASymbolicFontEncodingStrategy() | Конструктор. Устанавливает субтаблицу по умолчанию (mac 1,0) |
| PdfASymbolicFontEncodingStrategy(const System::SharedPtr<System::Collections::Generic::Queue<System::SharedPtr<PdfASymbolicFontEncodingStrategy::QueueItem>>>&) | Конструктор. |
| PdfASymbolicFontEncodingStrategy(PdfASymbolicFontEncodingStrategy::QueueItem::CMapEncodingTableType) | Конструктор. |
| set_CmapEncodingTablesPriorityQueue(const System::SharedPtr<System::Collections::Generic::Queue<System::SharedPtr<PdfASymbolicFontEncodingStrategy::QueueItem>>>&) | Указывает очередь субтаблиц кодирования для обработки. |
| set_PreferredCmapEncodingTable(PdfASymbolicFontEncodingStrategy::QueueItem::CMapEncodingTableType) | Указывает субтаблицу, которая будет использоваться в приоритете перед mac‑субтаблицей (1,0). Значение ‘MacTable’ из перечисления QueueItem::CMapEncodingTableType не имеет смысла в данном случае. |
См. также
- Class Object
- Namespace Aspose::Pdf
- Library Aspose.PDF for C++