Динамическое (фоновое) изображение на каждой странице отчета BIRT - PullRequest
1 голос
/ 06 декабря 2011

Я хочу написать динамический текст вертикально на правой стороне каждой страницы в PDF-документе, созданном с помощью Birt (2.5.2)

Это приводит меня к двум проблемам, которые, возможно, могут быть решены независимо:

  1. Писать текст по вертикали
  2. Поместите это на каждую страницу с правой стороны (верхний и нижний колонтитулы мне там не помогут)

Для задачи 1)

Я не смог найти способ написания текста по вертикали, поэтому я решил поместить свой текст в JLabel, сделать поворот на 90 градусов, записать изображение в ByteArrayOutputStream и использовать byteArray для добавления динамического изображения в мой отчет. => Это уже работает, если есть простое трехстрочное решение, о котором я не думал, я выслушаю причину:)

Для задачи 2)

В связи с тем, что верхний и нижний колонтитулы не могут использоваться для изображения / текста справа или слева, мой подход состоял в том, чтобы использовать фоновое изображение и поместить его вправо.

Проблема в том, что фоновое изображение в Birt может быть только URL или встроенным изображением Чтобы использовать мой сгенерированный byteArray, мне нужно использовать динамическое изображение.

Так что сейчас я могу думать только об одном возможном решении: сохранить сгенерированное изображение во временную папку с уникальным URL, добавить это изображение в качестве фонового изображения и затем удалить его. Но я думаю, что должно быть более простое решение.

==> ОБНОВЛЕНИЕ 1

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

В некоторых условиях отчет имеет 3 или 4 страницы, поэтому мне нужно скрыть последние изображения. Я могу получить количество страниц в конце отчета в первом столбце с помощью «reportContext.getPageVariable ('pageNumber')» и сохранить его в своей собственной переменной отчета. Каждое из пяти изображений получает номера от 1 до 5 и условие скрытия, если число больше, чем номер моей последней страницы.

Теперь мне нужно правильное место, где я получу свою страницу. Номер:

  • При рендеринге последнего элемента в первом столбце получается правильное число, но оно устанавливается позже, чем я использую его во втором столбце
  • При рендеринге строка всегда возвращает 1, но она устанавливается перед использованием во втором столбце
  • Добавление второй строки вернет правильный номер страницы, но будет установлено позже, чем я использую его во втором столбце

Кто-нибудь знает, как это сделать?

http://eclipse.org/birt/phoenix/deploy/reportScripting.php

==> ОБНОВЛЕНИЕ 1 КОНЕЦ

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Это сделано, и теперь, насколько я знаю, как это работает ... это легко;)

Для всех остальных возникает та же проблема, вот как вы получаете одинаковый контент на каждой странице в качестве боковой панели:

  1. Создайте сетку из двух столбцов для всей страницы и добавьте свой контент в один столбец.
  2. В проводнике данных создайте переменную отчета maxPages со значением по умолчанию 0
  3. Добавить текстовый элемент в качестве последнего элемента в столбце содержимого со следующими свойствами

    • Скрыть элемент, выражение: true
    • "При визуализации"скрипт:

      vars["maxPages"] = reportContext.getPageVariable("pageNumber");
      
  4. Добавьте повторяющийся элемент во второй столбец со следующими свойствами

    • Разрыв страницы - До: Всегда (кроме первого элемента)
    • Скрыть элемент, выражение:

      vars["maxPages"] != 0 && vars["maxPages"] <= reportContext.getPageVariable("pageNumber")
      
      • NOTE 1 : сравнить maxPages с 0, чтобы показать первыйстраниц, переменная доступна в первый раз на странице, заданной в первом столбце
      • ПРИМЕЧАНИЕ2 : сравните с меньшим, чем из-за разрыва страницы, переменная pageNumber содержит на единицу меньше реального номера страницы!

В моем случае повторяющийся элемент - это динамическое изображение с вертикальным текстом, но это может быть что угодно, просто оберните каждое вхождение в сетку

0 голосов
/ 07 декабря 2011

Один из возможных альтернативных подходов:

  1. Настройте свой отчет с помощью сетки из 2 столбцов и 1 строки.Растяните сетку по длине листа.
  2. Установите фиктивный набор данных, для которого определены числовые столбцы, но всегда не возвращает записей (например, с помощью условия where 1=0).
  3. Добавьте график на фиктивном наборе данных в правую ячейку сетки.Установите все, кроме заголовка оси y, чтобы он был невидимым или прозрачным.
  4. Введите нужный текст в заголовок оси y, а также установите направление текста, размер шрифта и т. Д., Как требуется, в y-Axis заголовок шрифта заголовка.
  5. Отрегулируйте ширину ячеек основной сетки так, чтобы правая ячейка была выровнена с правой стороной страницы и была достаточно широкой для отображения нужного текста.
  6. Вставьте оставшуюся часть отчета в левую ячейку главной сетки.

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

...