Я использую JasperSoft, чтобы создавать мои доклады, использую таблицу, чтобы показывать данные, в которых я нуждаюсь, которая питается прямо с базы данных посредством query. После того, как наблюдает предварительный вид внутри Jaspersoft покажи данные правильно, я составляю доклад и меня создает файл .jasper. То, что я нуждаюсь в том, чтобы узнать, как Java показывает вышеупомянутый доклад в моем приложении в формате PDF.
*Заметь: Я не хочу питать доклад с приложения, потому что как уже я упомянул о таблице он наполняется посредством query.
Первоначальный ответ в английском 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));
Наслаждается!
Чтобы отвечать хорошо на твой вопрос нам нужно, чтобы ты мы довел до сведения, что ты используешь продукт, 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 с твоим Веб приложением.
Пожалуйста ответь, даже, если уже ты решил проблему. Для того, чтобы мы ушли сомнения.
Привет.
В месте перемещать данные с 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, мне нравится возвращать договоренность байт доклада, но используя другие методы ты можешь манипулировать этим различной формы.
baos
? и #191; Если его один ByteArrayOutputStream
не быть и # 237; чтобы лучше это возвращать как stream вместо договоренности или wrapearlo в одном BufferedOutputStream
, чтобы не загружать все эти байт в память удара? Пальто, если est и # 225; s производя файлы тяжелых PDF, ты можешь изнывать ОЗУ очень r и # 225; я прошу.
–
12.02.2016, 20:22
Я то, что я использую, в классе (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();
возможно заставлять одну integraciГіn из одной aplicaciГіn Веб в java с netbeans и она aplicaciГіn Хасперрепортс Сервер, и с нее aplicaciГіn Веб получать доклады, которые находятся в Хасперрепорт Сервер в PDF или другой формат с одним botГіn или одна peticiГіn с нее aplicaciГіn Веб.
типов Привета.