iText image.setRotationDegrees () не сохраняет согласованное происхождение - PullRequest
0 голосов
/ 03 сентября 2018

Я использую iText для Java (5.5.13) и экспериментирую с вращением шаблонов PDF с использованием класса Image. Проблема в том, что я не могу понять, что iText использует для начала координат при повороте изображений (и я заранее извиняюсь, если я глуп).

Прикрепленный код, который я использую

  • Я создаю шаблон PDF
  • Заполните его произвольным цветом
  • Создать изображение из этого шаблона
  • Поворот изображения на 90 градусов
  • Установить абсолютные координаты для изображения
  • Добавить к автору

Повторите еще раз со вторым прямоугольником, но на этот раз поверните только на 30 градусов.

Разве не должно быть общего происхождения между двумя формами? (Похоже, что есть и нежелательный перевод)

// step 1
Rectangle pageSize = PageSize.A4;
Document document = new Document(pageSize);

// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(OUTPUT_FILENAME));

// step 3
document.open();

// step 4
float boxWidth = 200;
float boxHeight = 50;
float xStart = pageSize.getWidth()/2;
float yStart = pageSize.getHeight()/2;

// Add one filled rectangle rotated 90 degrees
{
    PdfContentByte canvas = writer.getDirectContent();
    PdfTemplate textTemplate = canvas.createTemplate(boxWidth, boxHeight);
    textTemplate.saveState();
    textTemplate.setColorFill(BaseColor.RED);
    textTemplate.rectangle(0, 0, boxWidth, boxWidth);
    textTemplate.fill();
    textTemplate.restoreState();

    Image img = Image.getInstance(textTemplate);
    img.setInterpolation(true);
    img.scaleAbsolute(boxWidth, boxHeight);
    img.setAbsolutePosition(xStart, yStart);
    img.setRotationDegrees(90);
    writer.getDirectContent().addImage(img);
}

// And another rotated 30 degrees
{
    PdfContentByte canvas = writer.getDirectContent();
    PdfTemplate textTemplate = canvas.createTemplate(boxWidth, boxHeight);
    textTemplate.saveState();
    textTemplate.setColorFill(BaseColor.BLACK);
    textTemplate.rectangle(0, 0, boxWidth, boxWidth);
    textTemplate.fill();
    textTemplate.restoreState();

    Image img = Image.getInstance(textTemplate);
    img.setInterpolation(true);
    img.scaleAbsolute(boxWidth, boxHeight);
    img.setAbsolutePosition(xStart, yStart);
    img.setRotationDegrees(30);
    writer.getDirectContent().addImage(img);
}

// step 5
document.close();

I tried to attach what I see as an inline screenshot but don't have the reputation yet. You can see it here:

Просто чтобы добавить фон, я делаю это, поскольку я хотел бы иметь возможность обернуть текст и изображения внутри вращающегося и позиционируемого содержимого (класс изображения с фиксированными размерами), которое затем я могу использовать для создания модель того, что выложено где на странице (с целью попробовать алгоритм словесного искусства, похожий на алгоритм wordle).

Спасибо!

1 Ответ

0 голосов
/ 10 сентября 2018

Разве не должно быть общего происхождения между двумя формами? (Похоже, что есть и нежелательный перевод)

Кажется, что вы подразумеваете, что шаблон сначала располагается, а затем вращается вокруг некоторой очевидной особой точки, например, нижний левый угол шаблона.

Это не тот случай. Вместо этого вы можете представить, что шаблон повернут, затем определяется ограничивающий прямоугольник (с ребрами, параллельными краям страницы), и нижний левый угол этого ограничивающего прямоугольника располагается в координатах, которые вы установили с помощью Image.setAbsolutePosition.

Это становится более очевидным, если нарисовать больше прямоугольников, например, для 0 °, 15 °, 30 °, 45 °, 60 °, 75 ° и 90 °:

enter image description here

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