На данной странице может быть несколько разных «ящиков»:
Media Box (обязательно): начальный размер страницы при просмотре печати.
Поле кадрирования (необязательно): заменяет поле мультимедиа. По умолчанию соответствует медиа-боксу. Должно быть подмножеством или соответствовать мультимедийному блоку.
Существуют также коробки для рисования / отделки / удаления, но они не так важны и встречаются гораздо реже.
Итак, размер страницы:
PdfReader reader = новый PdfReader (myPath);
// получает MEDIA BOX
Rectangle pageRect = reader.getPageSize (1); // 1 -> первая страница
// возвращает поле кадрирования, если оно есть, или поле мультимедиа, если нет.
Rectangle cropRect = reader.getCropBox (1);
// и наконец
Rectangle artBox = reader.getBoxSize (1, "art");
// может быть "art", "bleed", "crop", "media" или "trim"
Я бы пошел с getCropBox()
.
Я также рекомендую проверить JavaDoc для подобных вещей. По крайней мере, вы бы придумали getPageSize()
самостоятельно. Нет, это не C #. Да, это очень полезно.
http://api.itextpdf.com/
Также обратите внимание, что эти прямоугольники не обязательно должны быть основаны на 0,0 (это будет нижний левый угол на не повернутой странице).
Далее, вы должны проверить вращение страницы, getPageRotation(int)
, а также высоту и ширину подкачки, если поворот равен 90 или 270. Существует getPageSizeWithRotation(int)
, но он работает только с медиа-боксом, поэтому я бы сделал это себя на твоем месте. Это всего лишь несколько дополнительных строк кода:
// rotation has to be 0, 90, 180, or 270. "360" isn't kosher IIRC.
if (reader.getPageRotation(pageNum) % 180 != 0) {
float tmp = width;
width = height;
height = tmp;
}