отчеты о яшме в формате HTML - PullRequest
       3

отчеты о яшме в формате HTML

2 голосов
/ 30 сентября 2010

Использую библиотеку отчетов Jasper с приложением GWT.

Отчеты создаются в формате CSV, но в формате HTML генерируются страницы HTML с иконками отсутствующего изображения.

Я знаю, что яшма использует прозрачное изображение под названием "PX", это изображение не найдено.

Как я могу решить эту проблему?

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 14 января 2013

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

JasperPrint jasperPrint = JasperFillManager.fillReport(path, parameters, con);
JRHtmlExporter htmlExporter = new JRHtmlExporter();
response.setContentType("text/html");
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
htmlExporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
htmlExporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, false);
htmlExporter.exportReport();

Важная строка:изображения исчезают.

0 голосов
/ 15 октября 2010

Моим решением было использование данных URI. Это не очень элегантно, так как увеличивает размер HTML и не работает в IE до IE8, но позволяет вам не беспокоиться о создании файлов из вложений изображений, которые отправляет вам Jasper.

Если вы собираетесь реализовать это, вы хотите добавить этот аргумент к вашему запросу:

<argument name="IMAGES_URI"><![CDATA[data:]]></argument>

Затем вам нужно проанализировать HTML-отчет, который JasperServer отправляет обратно:

foreach ($attachments as $name => $attachment) {
    // Cut off the cid: portion of the name.
    $name = substr($name, 4);

    // Replace any image URIs with a data: uri.
    if (strtolower(substr($name, 0, 4)) !== 'uuid' && strtolower($name) !== 'report') {
        if (strtoupper(substr($attachment, 0, 3)) === 'GIF') {
            // It's a GIF.
            $report = str_replace("data:$name", 'data:image/gif;base64,' . base64_encode($attachment), $report);
        } elseif (/* more file type tests */) {
            // and so on...
        }
    }
}

Для больших изображений лучше всего сделать так, как предложил Гордон, и передать параметр, указывающий URL-адрес файла, который постоянно хранится на сервере. Этот метод более безопасен для изящной обработки любых неожиданных изображений, которые JasperServer пытается выдать вам.

0 голосов
/ 08 февраля 2011

Я немного опоздал на это обсуждение, но это то, что я использовал. Ключ должен передать imagesMap как атрибуту сеанса, так и параметру экспортера, а также установить параметр экспортера IMAGES_URI.

private void exportReportAsHtml(HttpServletRequest request, HttpServletResponse response, JasperPrint jasperPrint) throws IOException, JRException {
  response.setContentType("text/html");

  request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);

  Map imagesMap = new HashMap();
  request.getSession().setAttribute("IMAGES_MAP", imagesMap);

  JRHtmlExporter exporter = new JRHtmlExporter();
  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, response.getWriter());
  exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap); 
  exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image?image=");

  exporter.exportReport();

}

0 голосов
/ 30 сентября 2010

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

Вы можете установить тип параметра как BufferedImage или любой другой класс изображения.

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