Есть несколько вещей, которые вы должны понимать о PDF:
Система координат PDF находится в
точки (1/72 дюйма) по умолчанию.
Система координат PDF лишена разрешения. (это ложь в белом - разрешение фактически ограничено 32-битными числами с плавающей запятой).
К изображениям в PDF по своей природе не прикреплено никакого разрешения (это ложь белого цвета - изображения, сжатые с помощью JPEG2000, по-прежнему имеют разрешение во встроенных метаданных).
Изображение в PDF представляется объектом, который содержит серию выборок, которые хранятся с использованием какого-либо фильтра сжатия.
Объекты изображений могут отображаться на странице несколько раз в любом размере.
Поскольку разрешение определяется как количество пикселей (или выборок) на единицу расстояния, разрешение означает только что-то для определенной визуализации изображения на странице. Так что, если вы рендерите конкретное изображение для заполнения страницы, тогда разрешение в dpi будет
xdpi = image_width / (pageWidthInPoints / 72.0);
ydpi = image_height / (pageHeightInPoints / 72.0);
Если изображение не отображается в полный размер страницы, полное решение очень сложно. Adobe предписывает, что изображения должны обрабатываться как 1x1, и что вы изменяете матрицу преобразования страниц, чтобы определить, как их отображать. Означает, что вам потребуется матрица в точке рендеринга изображения, и вам нужно будет протолкнуть точки (0,0), (0, 1), (1,0) через матрицу. Евклидово расстояние между (0, 0) 'и (1, 0)' даст вам ширину в точках, а евклидово расстояние между (0, 0) 'и (0, 1)' даст вам высоту в точках.
Так как вы получили эту матрицу? Ну, вам нужен поток контента для страницы, и вам нужно написать интерпретатор PDF, который может копировать поток контента и отслеживать изменения в CTM. Когда вы достигаете своего изображения, вы извлекаете для него CTM.
Чтобы сделать этот последний шаг, нужно около часа с приличным инструментарием PDF, если вы знакомы с инструментарием. Написание этого инструментария - это работа нескольких человек.