В общем
Существует ряд атрибутов объектов PDF, которые определяют возможное вращение изображения в аннотации. Вы должны рассмотреть их все вместе.
Поворот страницы
Прежде всего, страница, на которой отображается аннотация, может быть повернута:
Поворот
целое число
(Необязательно; наследуется) Количество градусов, на которое страница должна поворачиваться по часовой стрелке при отображении или печати. Значение должно быть кратным 90. Значение по умолчанию: 0 .
(ISO 32000-2 Таблица 31 - Записи в объекте страницы)
Вращается ли аннотация вместе со своей страницей или нет, определяется флагом аннотации NoRotate :
5
NoRotate
(PDF 1.3) Если установлено, не поворачивайте внешний вид аннотации, чтобы соответствовать повороту страницы. Верхний левый угол прямоугольника аннотации должен оставаться в фиксированном месте на странице независимо от поворота страницы.
(ISO 32000-2 Таблица 167 - Флаги аннотации)
(ISO 32000-2 Рисунок 78 - Корректировка координат с помощью флага NoRotate)
Таким образом, поворот страницы должен учитываться только в том случае, если флаг аннотации NoRotate снят.
Внешний вид Матрица
Если у аннотации есть поток внешнего вида - что делает аннотация в рассматриваемом случае, потому что именно там находятся инструкции рисования растрового изображения - этот поток внешнего вида содержит атрибут матрицы преобразования, который контролирует, как поток внешнего вида вращается в аннотации прямоугольник:
AP
толковый словарь
(Необязательно; PDF 1.2) Словарь внешнего вида, определяющий, как аннотация должна быть представлена на странице визуально (см. 12.5.5, «Потоки внешнего вида»).
(ISO 32000-2 Таблица 166 - Записи, общие для всех словарей аннотаций)
Начиная с PDF 1.2, аннотация может указывать один или несколько потоков внешнего вида в качестве альтернативы простым характеристикам границы и цвета, доступным в более ранних версиях. Потоки внешнего вида позволяют визуально представлять аннотацию различными способами, отражая ее взаимодействие с пользователем. Каждый поток внешнего вида представляет собой форму XObject (см. 8.10, «Форма XObjects»): автономный поток контента, который должен отображаться внутри прямоугольника аннотации.
Алгоритм, описанный в этом подпункте, должен использоваться для отображения из системы координат внешнего объекта XObject (как определено его записью Matrix ; см. «Таблица 95 - Записи в справочном словаре») в прямоугольник аннотации в пользовательском пространстве по умолчанию:
Алгоритм: появление потоков
Ограничительная рамка внешнего вида (указанная в ее записи BBox ) должна быть преобразована с использованием Matrix , чтобы получить четырехугольник с произвольной ориентацией. Преобразованная коробка внешнего вида - это наименьший вертикальный прямоугольник, охватывающий этот четырехугольник.
Должна быть вычислена матрица A , которая масштабирует и преобразует преобразованную рамку внешнего вида, чтобы выровнять ее по краям прямоугольника аннотации (указанному в записи Rect ). A отображает нижний левый угол (угол с наименьшими x и y координатами) и верхний правый угол (угол с наибольшим x и y координаты) преобразованного окна представления в соответствующие углы прямоугольника аннотации.
Матрица должна быть объединена с A для формирования матрицы AA , которая отображается из системы координат внешнего вида в прямоугольник аннотации в пользовательском пространстве по умолчанию :
AA = Матрица ×A
(ISO 32000-2, раздел 12.5.5 - Внешний вид потоков)
Таким образом, эта матрица внешнего вида должна проверяться на предмет ее коэффициента вращения. Если матрица также имеет перекос или зеркальное отражение, сначала вам нужно решить, как разложить матрицу, так как значение угла поворота зависит от этой разложения.
Матрица преобразования тока
Когда растровое изображение рисуется с помощью инструкций рисования изображения в потоке контента, оно не обязательно рисуется вертикально в граничной рамке внешнего вида, оно рисуется, как указано значением текущей матрицы преобразования ta во время рисования.
Так же, как и матрица внешнего вида, эта матрица преобразования, возможно, должна быть разложена для определения угла поворота, к которому она применяется.
В вашем случае
Давайте посмотрим на ваш образец PDF.
Вращение страницы
Ротация страницы явно равна 0.
Матрица внешнего вида
Ни один из ваших потоков появления аннотаций не имеет записи Matrix . Таким образом, по умолчанию используется единичная матрица, которая не предполагает вращения.
Матрица преобразования тока
Потоки появления аннотаций создаются очень просто: между парой команд save-graphics-state и restore-graphics-state текущая матрица преобразования изменяется и изображение рисуется.
Матрицы преобразования четырех аннотаций не содержат (1) вращения нет, (2) вращения на 90 ° против часовой стрелки, (3) вращения на 180 ° и (4) вращения на 270 ° против часовой стрелки.
Это соответствует 4 аннотации, видимой на вашей странице.