Вывод JasperReports в формате html и pdf

Я хотел бы создать веб-страницу с динамическими отчетами с помощью JSP. В основном он должен содержать следующие части:

  1. Фильтр: пользователь может указать условия фильтра и нажать кнопку фильтра.
  2. HTML-вывод: Результат работы фильтра можно увидеть здесь. Это одна большая html-страница (или несколько, если одна страница будет слишком большой). Он может содержать ссылки на другие части системы.
  3. Вывод в формате PDF: пользователь должен иметь возможность сохранить версию отчета в формате PDF для печати или архивирования.

Вместо того, чтобы реализовывать все самостоятельно, я хотел бы использовать библиотеку отчетов Java, поэтому я создал свой отчет, используя JasperReports. Вывод в формате pdf действительно хорош, но экспорт отчета в html не подходит для моих целей.

HTML-экспорт JasperReport создает html-файл с большим количеством встроенного кода и довольно случайными параметрами конфигурации. Например, по умолчанию создается таблица с белым фоном (<table style="... bgcolor="white" ... ">), которую можно отключить с помощью IS_WHITE_PAGE_BACKGROUND, с другой стороны, cellpadding="0" cellspacing="0" border="0" зашиты в тег table. Также странно (и затрудняет стиль css), что вместо классов span html-файл содержит <span style="font-family: sansserif; color: #000000; font-size: 10.0px;"> для всех моих полей.

Конечно, я могу реализовать html-вывод с помощью JSP, но это означает, что мне нужно спроектировать вывод дважды (один раз в jrxml для JasperReports, один раз в JSP), и я должен заново реализовать функции отчетности (такие как расчет промежуточных итогов, общий расчет, группировка ...), что противоречит принципу DRY.

Какова наилучшая практика для реализации этого? Можно ли улучшить экспорт HTML с помощью JasperReports?


person asalamon74    schedule 06.11.2009    source источник


Ответы (1)


Нелегко изменить HTML-вывод JasperReports, чтобы он был хорошим. Вот старая цитата о том, почему:

... форматы документов, такие как HTML или XLS, не поддерживают абсолютное позиционирование текстовых и графических элементов. Содержание таких документов организовано в виде сетки или таблицы. Конечно, кто-то может возразить, что абсолютное позиционирование элементов в HTML возможно благодаря CSS, но вы можете быть уверены, что стандартная функциональность CSS реализована далеко не во всех браузерах или что один и тот же HTML-документ не везде будет выглядеть одинаково. .

Вот почему встроенные экспортеры ^JasperReports, которые создают документы HTML, XLS или CSV, используют специальный алгоритм для организации элементов, присутствующих на определенной странице документа, в своего рода сетку. Когда дизайн отчета очень сложный или агломерированный, переход от абсолютного позиционирования к сетке или табличному макету приводит к очень сложным таблицам с множеством неиспользуемых строк и столбцов, чтобы сделать это из-за пустого пространства между элементами или их специального выравнивания.

источник

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

Список вещей, которые вы можете контролировать для экспортера HTML, очень ограничен:

net.sf.jasperreports.export.html.frames.as.nested.tables
net.sf.jasperreports.export.html.remove.emtpy.space.between.rows
net.sf.jasperreports.export.html.size.unit
net.sf.jasperreports.export.html.using.images.to.align
net.sf.jasperreports.export.html.white.page.background
net.sf.jasperreports.export.html.wrap.break.word
net.sf.jasperreports.export.{format}.exclude.origin.{suffix}.{arbitrary_name}
net.sf.jasperreports.export.{format}.exclude.origin.keep.first.{suffix}.{arbitrary_name}

документация здесь

Я воздерживался от HTML и использую только PDF, Excel и CSV, если клиентам не нужен HTML. Если вам необходимо использовать HTML, вы можете определить таблицу стилей для работы с вашим сайтом и использовать jQuery для удаления всех встроенных стилей, чтобы ваша таблица стилей вступила во владение. Что-то типа:

$(document).ready(function() {
   $('span').removeAttr('style');
});
person beggs    schedule 06.11.2009