Подготовьте существующий размер страницы PDF (например, 8,5 x 11, 11 x 17) VB.Net - PullRequest
1 голос
/ 06 января 2011

Как видно из названия, я хотел бы прочитать существующий размер страницы в формате PDF с VB.Net.Я работал с Itext.Sharp и Acrobat.dll.Это возможно ??

1 Ответ

1 голос
/ 07 января 2011

На данной странице может быть несколько разных «ящиков»:

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;
}
...