Рендеринг произвольного XHTML с помощью JasperReports - PullRequest
1 голос
/ 22 сентября 2009

Мы встроили JasperReports в наше приложение для генерации отчетов, но я был довольно недоволен тем, как JEditorPaneHtmlMarkupProcessor обрабатывает запись произвольного XHTML. Например, мне нужно было вывести маркированный список в одной точке, что и происходит, но поскольку он преобразует его в фактические символы маркера и символы новой строки, маркер с довольно длинным текстом приводит к переносу текста для выравнивания с маркером, а не с первая буква текста.

Из-за этой и аналогичных проблем я подумал, что мог бы попытаться визуализировать содержимое XHTML в виде графики (используя средство визуализации flyingsaucer XHTML). Это дает мне намного лучший контроль над тем, как это выглядит, но есть еще одна проблема. Согласно Полному руководству по JasperReports , «Все позиционирование и изменение размеров в шаблонах JasperReports и сгенерированных документах выполняется с использованием стандартного разрешения Java 72 dpi». Похоже, что отдельные буквы должны быть расположены в интегральных координатах. При 72 dpi это не так уж и страшно, поскольку в худшем случае это приводит к ошибкам позиционирования субпикселя, а не к каким-либо существенным последствиям. Однако при рендеринге в PDF JasperReports увеличивает его до 300 dpi, что приводит к тому, что горизонтальные позиции некоторых букв иногда отключаются на несколько пикселей.

Есть ли какой-нибудь способ улучшить визуализацию произвольного XHTML, или есть какой-то способ заставить JasperReports выполнять позиционирование и определение размера при 300 dpi вместо 72?

1 Ответ

0 голосов
/ 29 декабря 2009

В конечном итоге я решил эту проблему с помощью средства визуализации, которое не настаивало на целочисленных позициях символов: JEditorPane из Swing:

JEditorPane pane = new JEditorPane();
pane.setBorder(null);
pane.setSize(w, h);
pane.setContentType("text/html");
pane.setEditable(false);
pane.setText(html);
pane.paint(g2);
...