用于运行JasperReport库的Python应用程序 - 即没有JasperServer

时间:2014-05-28 11:33:52

标签: python jasper-reports

我正在尝试从python应用程序中运行Jasper报告(已在iReports中编写并导出到xml),而无需与JasperServer实例通信。这可能吗?

我做了一些谷歌搜索,只遇到了一个2岁的SO问题(建议的答案实际上需要JasperServer): Run jasper report (created with iReport) from within python without jasperserver?

除了标题中的“它已过时”之外,还有一些看起来很有希望的东西: http://code.activestate.com/recipes/576969-python-jasperreport-integration-it-is-obsolete/

我希望它已经过时了,因为现在这是一个官方支持的东西(梦想,Dave),但我找不到任何关于它的东西,如果是的话。

2 个答案:

答案 0 :(得分:0)

实际上Jasper Reports并没有在Python中实现,因此让它为Python代码提供服务的唯一方法就是让Jasper Server运行并等待通过REST或其他远程通信方式的Python请求。

简单 - 没有办法让Jasper没有Jasper(服务器)在Python中

答案 1 :(得分:0)

我使用了py4j。我不得不用Java编写一个小程序。 使用this as an example,很简单。

配置构建环境并放置所有依赖项以打印qr代码更加困难。

Python示例:

    from py4j.java_gateway import JavaGateway
    gateway = JavaGateway()
    gateway.entry_point.pdf_from_json('e:/test.jasper', 'e:/test.json', 'e:/test.pdf')

Java示例:

package jasper4py;

import py4j.GatewayServer;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JsonDataSource;
import net.sf.jasperreports.engine.util.JRLoader;

public class JasperEntryPoint {

    public static void main(String[] args) {
        GatewayServer gatewayServer = new GatewayServer(new JasperEntryPoint());
        gatewayServer.start();
        System.out.println("Gateway Server Started");
    }

    public void pdf_from_json(String report, String data, String result) throws JRException, IOException {
        Map<String, Object> parameters = new HashMap<String, Object>();
        JsonDataSource dataSource = new JsonDataSource(JRLoader.getLocationInputStream(data));
        JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource);
        JasperExportManager.exportReportToPdfFile(jasperPrint, result);
    }
}