Itext 7.0.2 Поворот изображения по часовой стрелке - PullRequest
0 голосов
/ 25 апреля 2018

Элемент изображения (com.itextpdf.layout.element.Image) поддерживает вращение против часовой стрелки. Можно ли сделать вращение по часовой стрелке того же изображения?

PdfPage page = iTextPdfDoc.getLastPage();
PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), page.getResources(), iTextPdfDoc);
Canvas canvas = new Canvas(pdfCanvas, iTextPdfDoc, page.getPageSize());
Image img = new Image(ImageDataFactory.create(path));
img.scaleAbsolute(525.58203, 737.0079)
img.setFixedPosition(30.785828, 34.66619)

// The following block of code does not affect the center point of rotation.
// I tried a lot of different values for rotation point. No change!
{
  img.setProperty(Property.ROTATION_POINT_X, 30.785828);
  img.setProperty(Property.ROTATION_POINT_Y, 34.66619);
}

img.setProperty(Property.ROTATION_ANGLE, Math.toRadians(90)); //img.setRotationAngle(Math.toRadians(90));
canvas.add(img);

Обновление:

Это то, что происходит с изображением, используя 90 градусов против часовой стрелки. enter image description here

Это то, что происходит с изображением, используя -90 или 270 градусов против часовой стрелки. enter image description here

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Я обнаружил, что проблема связана с:

img.scaleAbsolute(525.58203, 737.0079)

Эта строка масштабирует изображение для встраивания в контейнер с помощью

width = 525.58203 and height = 737.0079.

Следующий блок кода делает то, что мне нужно!

PdfPage page = iTextPdfDoc.getLastPage();
PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), 
page.getResources(), iTextPdfDoc);
Canvas canvas = new Canvas(pdfCanvas, iTextPdfDoc, page.getPageSize());
Image img = new Image(ImageDataFactory.create(path));

float width = img.getXObject().getWidth();
float widthContainer = 525.58203;
float heightContainer = 737.0079;
float horizontalScaling = widthContainer / width;

img.scaleAbsolute(widthContainer, heightContainer);

img.setProperty(Property.ROTATION_ANGLE, Math.toRadians(270));
img.setFixedPosition(imageLlx, imageLly + width * horizontalScaling);

canvas.add(img);

Результат выглядит так: enter image description here

0 голосов
/ 25 апреля 2018

Как насчет:

img.setRotationAngle(Math.toRadians(270));

Зачем вам усложнять ситуацию, создавая две функции для чего-то, что можно сделать только с одной функцией?

(Последнее замечание было затронуто ключевой заметкойVenkat Subramaniam на Великом индийском саммите разработчиков сегодня утром. Основной доклад звучал так: «Не уходи от сложности, беги!»)

Обновление:

После вашего начального комментария ( Я также пытался с 270. По причине, которую я не понимаю, изображение было повернуто по часовой стрелке, но оно расположено под нижней частью страницы PDF. ), я сделал этоimage:

enter image description here

Во втором комментарии вы написали: Вы правы!Это означает, что мне нужно снова установить положение, чтобы изображение отображалось на странице PDF.Как я могу переместить изображение, чтобы его можно было перемещать выше нижней части страницы?

Это, вероятно, зависит от того, как вы позиционируете изображение в первую очередь.Что вы сейчас используете?Используете ли вы метод setFixedPosition() или setRelativePosition()?Или вы просто добавляете изображение в документ без определения позиции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...