在Flex中生成导出

j7dteeu8  于 2022-09-21  发布在  Apache
关注(0)|答案(1)|浏览(125)

我有以下名为Edition的类,用于将报告导出为PDF。我测试了这个类,它运行得很好。

public final class Edition {

    private static Edition m_Instance = null;
    private IReportEngine engine;
    private String realPath;
    private IRenderOption option;
    private String etat;
    private String chemin;
    private Map<String, Object> parametres;
    private String format;
    private Locale langue;

    /**
     * Constructeur
     * Il configure le moteur BIRT de sorte à ce qu'il puisse retrouver
     * les ressources BIRT mais également les librairies le faisant tourner
     * Il est alors démarrer avec cette configuration.
     * @throws BirtException
     */
    Edition() throws BirtException {
        EngineConfig config = new EngineConfig();
        //realPath = "/home/atef/workspace1.0/Reporting/WebContent";
        //config.setResourcePath(new File(realPath, "WEB-INF/classes/ressources").getAbsolutePath());
        config.setBIRTHome(new File("C:\Users\ameni\Downloads\birt-runtime-4_4_1-20140916\birt-runtime-4_4_1\ReportEngine\lib").getAbsolutePath());//endroit où se trouvent les librairies du Runtime
        Platform.startup(config);
        IReportEngineFactory factory = (IReportEngineFactory) Platform
            .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
        engine = factory.createReportEngine(config);
        option = new RenderOption();
    }

    /**
     * Instanciation du service
     * @return l'instance en cours du service
     * @throws BirtException
     */
    public static Edition getInstance() throws BirtException {
        if (m_Instance == null) {
            m_Instance = new Edition();
        }
        return m_Instance;
    }

    /**
     * Initialisation
     * @param etat nom du rptdesign
     * @param chemin chemin et nom du fichier de sortie
     * @param parametres paramètres à passer à l'état
     * @param format format de sortie (PDF, XLS, DOC, etc.)
     * @param langue langue de l'édition
     */
    public void init(String etat, String chemin, Map<String, Object> parametres, String format, String langue) {
        this.etat = etat;
        this.chemin = chemin;
        this.parametres = parametres;
        this.format = format;
        this.langue = new Locale(langue);
    }

    /**
     * Lancement de l'état
     * @throws ScriptException 
     */
    public void runBirt(){
        try {
            /* Récupération du rptDesign */
            IReportRunnable design = engine.openReportDesign(new File("C:\Users\ameni\workspace\RoamSmartTest\report.rptdesign").getAbsolutePath());
            IDataSource dataSource = design.getDesignInstance().getDataSource("Data Source");
            try {
                dataSource.setPrivateDriverProperty("odaDriverClass", "org.postgresql.Driver");
                dataSource.setPrivateDriverProperty("odaURL", "jdbc:postgresql://127.0.0.1:5432/springdb");
                dataSource.setPrivateDriverProperty("odaUser", "ameni");
                dataSource.setPrivateDriverProperty("odaPassword", "ameni");
            }
            catch (ScriptException e) {
                e.printStackTrace();
            }

            System.out.println("Récupération du rptDesign");
            /* Exécution */
            IRunTask runTask = engine.createRunTask(design);
            System.out.println("Exécution");        
            /* Paramètres */
            for (String clef : parametres.keySet()) {
                runTask.setParameterValue(clef, parametres.get(clef));
            }
            System.out.println("Paramètres");       

            /* Langue */
            runTask.setLocale(langue);
            System.out.println("Langue  Chmn:"+chemin);         
            runTask.run(chemin+".rptdocument");

            /* Récupération du rptDocument */
            IReportDocument doc = engine.openReportDocument(chemin+".rptdocument");
        //IDataSet dat=design.getDesignInstance().getDataSet("MyData");

            System.out.println("Récupération du rptDocument 2");    
            /* Rendu */
            IRenderTask renderTask = engine.createRenderTask(doc);
            System.out.println("Rendu");        
            option.setOutputFileName(chemin);//Nom du fichier de sortie
            option.setOutputFormat(format);//Format du fichier de sortie

            renderTask.setRenderOption(option);//Chargement du fichier

            renderTask.render();//Création du fichier
        }
        catch (EngineException e) {
            e.printStackTrace();
        }
    }

    public void destructeur() {
        engine.destroy();
    }
 }

现在我想知道如何在flex中调用这个类,比如使用按钮,有什么想法吗?

Flex

<s:Button label="Export" click="button1_clickHandler(event)" />
dxxyhpgq

dxxyhpgq1#

如果您使用的是Adobe AIR,则可以使用NativeProcess API:

public function handler(e:Event):void {
    if(NativeProcess.isSupported)
    {
        var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
        var file:File = File.applicationDirectory.resolvePath("extractor.jar");
        nativeProcessStartupInfo.executable = file;

        var processArgs:Vector.<String> = new Vector.<String>();
        processArgs[0] = "foo";
        //Add any additional arguments for the jar here
        nativeProcessStartupInfo.arguments = processArgs;

        process = new NativeProcess();
        process.start(nativeProcessStartupInfo);
        process.addEventListener(NativeProcessExitEvent.EXIT, onExit);
        //There are more listeners you might want to add, e.g. error event handlers
    }
    else
    {
        trace("NativeProcess not supported.");
    }
}

相关问题