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

运行JasperReport库的Python应用程序-即没有JasperServer,python,jasper-reports,Python,Jasper Reports,我希望尝试运行用iReports编写并从python应用程序中导出为xml的Jasper报告,而不必与JasperServer实例通信。这可能吗 我在谷歌上搜索了一下,只遇到了一个2岁的问题,建议的答案实际上需要JasperServer: 有些东西看起来很有希望,除了标题中的“它已经过时了”: 我希望它已经过时了,因为Dave,这现在是一个官方支持的dream on,但我找不到任何关于它的信息,如果是的话。实际上Jasper Reports没有用Python实现,因此,让它服务于Python

我希望尝试运行用iReports编写并从python应用程序中导出为xml的Jasper报告,而不必与JasperServer实例通信。这可能吗

我在谷歌上搜索了一下,只遇到了一个2岁的问题,建议的答案实际上需要JasperServer:

有些东西看起来很有希望,除了标题中的“它已经过时了”:


我希望它已经过时了,因为Dave,这现在是一个官方支持的dream on,但我找不到任何关于它的信息,如果是的话。

实际上Jasper Reports没有用Python实现,因此,让它服务于Python代码的唯一方法是让Jasper服务器通过REST或其他远程通信方式运行并等待Python请求

简单-在Python中没有Jasper服务器的情况下,没有Jasper是不可能的。我不得不用java编写一个小程序。 使用,它很简单

配置构建环境和放置用于打印二维码的所有依赖项更加困难

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);
    }
}

我意识到Jasper是一个java库,但如果有人进行了绑定,理论上仍然可以在python中使用它。我真的希望尽量减少我们系统的需求,只需要偶尔运行一些报告,而不需要一个完整的JasperServer的开销,它具有所有的“好处”,如我们根本不需要的调度: