Как подключить JasperRerport для печати определенных данных из Postgress db в netbeans - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь сгенерировать некоторые отчеты, используя JasperReports это то, что я сделал до сих пор.

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    Connection conn = null;

    try{

        Class.forName("org.postgresql.postgresql-42.2.2");
        conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "postgres", "testPassword");
        String report = "";

        JasperReport jasperReport = JasperCompileManager.compileReport(report);

        JasperPrint jp = JasperFillManager.fillReport(jasperReport, null, conn);

        JasperExportManager.exportReportToPdfStream(jp, response.getOutputStream());
        response.getOutputStream().flush();
        response.getOutputStream().close();

    }catch(Exception ex){
        System.out.println(ex);
    }
}                                        

Я сделал все это с помощью этого видео

Но «response.getOutputStream ()» не работает. он не найдет переменную ответа. (учебник сделан в затмении, так что считается, что причина, или NetBeans не сможет его найти ..

Какое решение может быть для этого? у вас есть другой способ как это сделать?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Есть много проблем с кодом. Давайте возьмем их по одному за раз.

Загрузка драйвера JDBC

Сбой следующего кода:

    Class.forName("org.postgresql.postgresql-42.2.2");

Это не класс, это ссылка на архив Java, который содержит класс драйвера. Документация PostgreSQL предлагает следующий пример использования драйвера JDBC:

String url = "jdbc:postgresql://localhost/test";
Properties props = new Properties();
props.setProperty("user","fred");
props.setProperty("password","secret");
props.setProperty("ssl","true");
Connection conn = DriverManager.getConnection(url, props);

-или-

String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true";
Connection conn = DriverManager.getConnection(url);

Вам нужно убедиться, что org.postgresql.postgresql-42.2.2.jar находится где-то в пути к классам, чтобы можно было найти класс драйвера.

Файл отчета не указан

Следующий код не может быть правильным:

    String report = "";

Здесь необходимо указать путь для загрузки файла JRXML. Например:

    String report = "reports/Template.jrxml";

AWT против JSF?

Следующая строка предполагает, что настольное приложение пишется из-за его ссылки на AWT ActionEvent:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

Однако отчет экспортируется в поток вывода ответа, который предполагает запись в веб-браузер:

    JasperExportManager.exportReportToPdfStream(jp, response.getOutputStream());

JasperReports плохо работает с выходными потоками JSF. Вместо этого вы захотите использовать сервлет с JasperReports и использовать простой h:commandLink или h:commandButton, чтобы начать генерацию отчета с веб-страницы.

Подробнее см. https://stackoverflow.com/a/35698286/59087.

Переменная ответа

Переменная ответа не объявлена ​​в предоставленном фрагменте кода. При использовании сервлета переменная ответа предоставляется сигнатурой метода :

protected void doGet(HttpServletRequest request,
                     HttpServletResponse response)
              throws ServletException,
                     IOException {
  // ... your code here to handle generating report ...
}

Теперь переменная response доступна для использования, но только из контекста сервлета.

Принцип СУХОГО

В качестве незначительного примечания следующие три строки нарушают принцип DRY :

    JasperExportManager.exportReportToPdfStream(jp, response.getOutputStream());
    response.getOutputStream().flush();
    response.getOutputStream().close();

Вместо этого вы можете написать:

    OutputStream out = response.getOutputStream();
    JasperExportManager.exportReportToPdfStream(jp, out);
    out.close();

Обычно нет необходимости вызывать out.flush(), потому что out.close() обеспечит сброс данных.

Рекомендация

Посмотрите в Интернете примеры, показывающие, как создать отчет с использованием сервлета.

https://github.com/deadlydirk/jasperreports-example/blob/master/src/main/java/be/example/jasper/servlet/ReportServlet.java

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

http://www.ewebtutorials.com/generate-pdf-report-using-jasper-report-api-in-java.html

0 голосов
/ 29 июня 2018

Используйте JasperExportManager.exportReportToPdfFile() для сохранения PDF в файл:

JasperExportManager.exportReportToPdfFile(jp, "path/to/file.pdf");

Если вы просто хотите показать его на экране: используйте JasperViewer.viewReport(), чтобы отобразить его в окне.

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