Как производить PDF в Java с файлом .jasper?

Я использую JasperSoft, чтобы создавать мои доклады, использую таблицу, чтобы показывать данные, в которых я нуждаюсь, которая питается прямо с базы данных посредством query. После того, как наблюдает предварительный вид внутри Jaspersoft покажи данные правильно, я составляю доклад и меня создает файл .jasper. То, что я нуждаюсь в том, чтобы узнать, как Java показывает вышеупомянутый доклад в моем приложении в формате PDF.

*Заметь: Я не хочу питать доклад с приложения, потому что как уже я упомянул о таблице он наполняется посредством query.

3
задан 12.02.2016, 22:26
5 ответов

Первоначальный ответ в английском SO: https://stackoverflow.com / в / 8569883/3613462

мы видим, asГ - он такой, как оно функционирует: JasperFillManager возвращает JasperPrint object, тогда:

// obtenemos la plantilla JRXML como un stream
InputStream template = JasperReportsApplication.class
    .getResourceAsStream("/sampleReport.xml");
// compilamos el reporte desde el stream
JasperReport report = JasperCompileManager.compileReport(template);
// llenamos el reporte en un print object, listo para exportar
JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String, String>());
// Lo exportamos!
File pdf = File.createTempFile("output.", ".pdf");
JasperExportManager.exportReportToPdfStream(print, new FileOutputStream(pdf));

Наслаждается!

2
ответ дан 24.11.2019, 14:53
  • 1
    Я был готов ответить что-то сходное, но encontr и # 233; какая-то неосновательность в вопросе как это: я не нашел способ производить доклад внутри JAVA; они c и # 243; digos, который я нашел в Интернете, принадлежат людям, которыми они наполняют Ваши доклады с aplicaci и # 243; n, но я уже это наполняю прямо с Jaspersoft –  12.02.2016, 20:04

Чтобы отвечать хорошо на твой вопрос нам нужно, чтобы ты мы довел до сведения, что ты используешь продукт, Jaspersoft - компания, не продукт. Например, когда ты говоришь, что "предварительный вид внутри Jaspersoft", мы не знаем, если ты имеешь в виду дизайнера Jaspersoft® Студио или сервер докладов JasperReports® Server.

Доклады обычно разрабатываются в Jaspersoft® Studio или IReport®, и сохраняют в файле .jrxml, вышеупомянутый файл составляется .jasper и последний может превращаться множеству форматов, включая PDF. Превращение .jrxml в .jasper может делаться PDF с того же Studio, в JasperReports® Server или с твоего собственного приложения используя JasperReports® Library, вышеупомянутая сцена - тот, которого мы пробовали тебя решить.

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

//Prefiero usar el .jrxml a la aplicacion que el .jasper por que es mas facil de versionar
String sourceFileName = rutaFisica + "MiReporte.jrxml";            
File theFile = new File(sourceFileName);
JasperDesign jasperDesign = JRXmlLoader.load(theFile);//Se carga el archivo

//Si el reporte va a tener un query fijo, puedes omitir este paso
JRDesignQuery newQuery = new JRDesignQuery();
newQuery.setText("SELECT * FROM miTabla WHERE X = Y");
jasperDesign.setQuery(newQuery);

Map parameters = new HashMap();//Parametros que usa el jasperreports
//Este parametro sirve para meter una funcion que el reporte va a ejecutar para encontrar la ruta fisica de sus imagenes
parameters.put("REPORT_FILE_RESOLVER", new FileResolver() {
                public File resolveFile(String fileName) {
                    return new File(getServletContext().getRealPath("") + "\\mis_imagenes\\"+fileName); 
                }
            });
//Se compila el archivo a .jasper
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

//Aqui se llena el reporte (se ejecuta la consulta)
JasperPrint print = new JasperPrint();
print = JasperFillManager.fillReport(jasperReport, parameters, getConnection());
byte[] pdfBytes = JasperExportManager.exportReportToPdf(print);
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline;filename=" + nombreArchivo + ".pdf");
response.getOutputStream().write(pdfBytes);
response.flushBuffer();

В конце концов, видя твое конечное замечание:

*Заметь: Я не хочу питать доклад с приложения, потому что как уже я упомянул о таблице он наполняется посредством query.

И видя редактирования твоего вопроса

я не нашел способ производить доклад внутри JAVA; коды, которые я нашел в Интернете, принадлежат людям, которыми они наполняют Ваши доклады с приложения, но я уже это наполняю прямо с Jaspersoft

он заставляет меня верить (и исправь меня, если я ошибаюсь) то, что ты думаешь, что файл .jasper уже включает данные, с которыми питается доклад, и который не занимает "быть питательное" из-за приложения, файл .jasper - только составленная версия файла .jrxml, если ты открываешь последний с текстовым редактором, ты увидишь, что находится определение твоей консультации (SELECT * FROM ...) но не твои данные, доклад должен присоединяться в базу данных каждый раз, когда произвелся PDF, поэтому getConnection() в моем примере.

Или равный ни один из нас мы поняли тебя, и единственное, что ты хочешь, состоит в том, чтобы соединять твой JasperReports® Server с твоим Веб приложением.

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

Привет.

3
ответ дан 24.11.2019, 14:53

В месте перемещать данные с Java, ты нуждаешься в том, чтобы переместить его цепь связи для того, чтобы он выполнил query, который у него есть внутри, что ты упоминаешь о том, что уже производить правильно твой доклад более или менее полные

jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conexion);

было бы

Map<String, Object> parameters = new HashMap<String, Object>();// Creamos mapa de parametros de ayuda
parameters.put("algunParametro", x);
parameters.put("tipo", y);
Connection conexion = crearConexion(); // creamos la conexion a la base de datos
jasperReport = (JasperReport) JRLoader.loadObjectFromFile(rutaArchivo);//Cargamos al jasper    

jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conexion);// llenamos el reporte, indicando la conexion a base de datos

JRPdfExporter pdfExporter = new JRPdfExporter(); //Creamos el exporter a PDF
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);//EDIT 
exporter.exportReport();
return baos.toByteArray(); //y obtenemos los valiosos bytes generados ;)

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

0
ответ дан 24.11.2019, 14:53
  • 1
    #191; Цюй и # 233; его baos? и #191; Если его один ByteArrayOutputStream не быть и # 237; чтобы лучше это возвращать как stream вместо договоренности или wrapearlo в одном BufferedOutputStream, чтобы не загружать все эти байт в память удара? Пальто, если est и # 225; s производя файлы тяжелых PDF, ты можешь изнывать ОЗУ очень r и # 225; я прошу. –  12.02.2016, 20:22
  • 2
    @LuiggiMendoza Я Думаю, что ты прав, это привычка в минутах делаю edit – jasilva 12.02.2016, 20:43

Я то, что я использую, в классе (AbstractaJasperReports):

/**
* reporte como tal del sistema de archivos
*/
private static JasperReport report;

/**
* reporte, pero ya lleno con la información que trae el query interno
*/
private static JasperPrint reportFilled;

/**
* visor donde se va a mostrar el reporte
*/
private static JasperViewer viewer;    

public static void crearInforme(Connection conexion, String ruta, Map parametros)
{
  try
  {
    report = (JasperReport) JRLoader.loadObjectFromFile(ruta);
    reportFilled = JasperFillManager.fillReport(report, parametros, conexion);
  } catch (JRException e)
  {
    e.printStackTrace();
  }
}

public static void verVisor()
{
  viewer = new JasperViewer(reportFilled, false);
  viewer.setVisible(true);
}

И потом называть для это, я делаю:

// creo la conexión a la BBDD
ConexionBBDD conn = new ConexionBBDD();

HashMap<String, Object> parametros = new HashMap<String, Object>();

parametros.put("clave", valor);

AbstractaJasperReports.crearInforme((Connection) conn.getConexion(), "./src/rutaAlJasper/ficheroJasper.jasper", parametros);

AbstractaJasperReports.verVisor();
0
ответ дан 24.11.2019, 14:53

возможно заставлять одну integraciГіn из одной aplicaciГіn Веб в java с netbeans и она aplicaciГіn Хасперрепортс Сервер, и с нее aplicaciГіn Веб получать доклады, которые находятся в Хасперрепорт Сервер в PDF или другой формат с одним botГіn или одна peticiГіn с нее aplicaciГіn Веб.

типов Привета.

0
ответ дан 24.11.2019, 14:53

Теги

Похожие вопросы