iText - размеры документа [дубликат]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
1
задан Jean-François Savard 29 April 2014 в 00:52
поделиться

2 ответа

Fix:

использовать

PdfStamper.getImportedPage(pdfReader, pagenumber).getBoundingBox().getWidth()

вместо

stamper.getOverContent(i).getPdfDocument().getPageSize().getWidth();
0
ответ дан Jean-François Savard 18 August 2018 в 22:58
поделиться
  • 1
    Это странное решение. Пожалуйста, взгляните на мой ответ для лучшего подхода. – Bruno Lowagie 29 April 2014 в 07:09

Существует два метода удобства, названных getPageSize() и getPageSizeWithRotation().

Давайте посмотрим на пример:

PdfReader reader =
    new PdfReader("src/main/resources/pages.pdf");
show(reader.getPageSize(1));
show(reader.getPageSize(3));
show(reader.getPageSizeWithRotation(3));
show(reader.getPageSize(4));
show(reader.getPageSizeWithRotation(4));

В этом примере show() выглядит следующим образом:

public static void show(Rectangle rect) {
    System.out.print("llx: ");
    System.out.print(rect.getLeft());
    System.out.print(", lly: ");
    System.out.print(rect.getBottom());
    System.out.print(", urx: ");
    System.out.print(rect.getRight());
    System.out.print(", lly: ");
    System.out.print(rect.getTop());
    System.out.print(", rotation: ");
   System.out.println(rect.getRotation());
}

Это вывод:

llx: 0.0, lly: 0.0, urx: 595.0, lly: 842.0, rotation: 0
llx: 0.0, lly: 0.0, urx: 595.0, lly: 842.0, rotation: 0
llx: 0.0, lly: 0.0, urx: 842.0, lly: 595.0, rotation: 90
llx: 0.0, lly: 0.0, urx: 842.0, lly: 595.0, rotation: 0
llx: 0.0, lly: 0.0, urx: 842.0, lly: 595.0, rotation: 0

Page 3 (см. строку 4 в примере кода 3.8) является страницей A4, как страница 1 , но он ориентирован в ландшафте. Запись /MediaBox идентична записи, используемой для первой страницы [0 0 595 842], и поэтому getPageSize() возвращает тот же результат.

Страница находится в альбомной ориентации, потому что запись \Rotate в для словаря страницы установлено значение 90. Возможные значения для этой записи: 0 (это значение по умолчанию, если запись отсутствует), 90, 180 и 270.

Метод getPageSizeWithRotation() принимает это значение в Счет. Он меняет ширину и высоту, чтобы вы знали о различии. Он также дает вам значение записи /Rotate.

Page 4 также имеет ландшафтную ориентацию, но в этом случае вращение имитируется путем адаптации записи /MediaBox. В этом случае значение /MediaBox равно [0 0 842 595], и если есть запись /Rotate, его значение равно 0.

Это объясняет, почему вывод метода getPageSizeWithRotation() идентичен к выходу метода getPageSize().

Когда я прочитал ваш вопрос, я вижу, что вы ищете поворот. Это можно сделать с помощью метода getRotation().

Примечание: Этот текст скопирован из моей книги «ABC of PDF» (книга находится в разработке, вы можете скачать первые главы бесплатно). Образец кода можно найти здесь здесь .

3
ответ дан Bruno Lowagie 18 August 2018 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: