简体   繁体   中英

Print Report from JasperReports Server Repository

I would like ask your help for some solutions. I want to know how can I print report from jasperserver repository. I spent time googling for a period of time, but still cannot get it solve. I got this source, but it does not work. Can someone fix it? Any idears? Please help me.

1.Here is the source code:

package com.src.report;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.ResourceDescriptor;
import com.jaspersoft.jasperserver.irplugin.JServer;
import com.jaspersoft.jasperserver.irplugin.wsclient.WSClient;

public class PrintService {

    private static JServer server = null;

    public static void ConnectionString(String webServiceUrl, String username, String password){
        server = new JServer();
        server.setUsername(username);
        server.setPassword(password);
        server.setUrl(webServiceUrl);
    }

    public static void runReports(String webServiceUrl, String username, String  password) throws Exception{
        ConnectionString(webServiceUrl, username, password);
        WSClient client = new WSClient(server);

        ResourceDescriptor resourceDescriptor = new ResourceDescriptor();
        resourceDescriptor.setUriString ("/reports/samples/EmployeeAccounts");
        Map<String, Object> parameterMap = new HashMap<String, Object>();
        parameterMap.put("MY_PARAMETER_NAME", "myparametervalue");
        JasperPrint printer = client.runReport(resourceDescriptor, parameterMap);
        JasperViewer.viewReport(printer, false, Locale.ENGLISH);
    }

    public static void main(String[] args) throws Exception {
       String webServiceUrl = "http://localhost:8080/jasperserver-pro/services/repository";
       String username = "jasperadmin";
       String password = "jasperadmin";
       runReports(webServiceUrl, username, password);
    }
}

2.And here is the error message:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xerces/parsers/AbstractDOMParser
at com.jaspersoft.jasperserver.irplugin.wsclient.WSClient.<init>(WSClient.java:73)
at com.src.report.PrintService.runReports(PrintService.java:37)
at com.src.report.PrintService.main(PrintService.java:51)
    Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.AbstractDOMParser
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more

u can make use of the rest api of jasper it is as simple as:

http://<host>:8080/jasperserver-pro/rest_v2/reports/pathofReport/reportID.format?j_username=username&j_password=password

Refer to this

As I googled for a period of time, I have found some solution related to my question above. My purpose here is not for reputation or anything else, but just wanna tell someone who get the same issue as I did.

My solution is here:

1/ Requirement Jar Files:

  1. activation-1.1.jar
  2. axis-1.3.jar
  3. activation-1.1.jar axis-1.3.jar
  4. commons-codec-1.5.jar
  5. commons-collections-3.2.jar
  6. commons-digester-1.7.jar
  7. commons-discovery-0.4.jar
  8. commons-logging-1.1.3.jar
  9. commons-logging-1.1.3-javadoc.jar
  10. commons-logging-1.1.3-sources.jar
  11. commons-logging-adapters-1.1.3.jar
  12. commons-logging-api-1.1.3.jar
  13. jasperreports-5.2.0.jar
  14. jasperserver-common-ws-5.2.0.jar
  15. jasperserver-ireport-plugin-2.0.1.jar
  16. jaxrpc.jar
  17. mail-1.4.jar
  18. saaj.jar
  19. wsdl4j-1.5.1.jar

2/ Coding:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jaspersoft.src.jasperprint;

import net.sf.jasperreports.engine.JasperPrint;
import com.jaspersoft.jasperserver.irplugin.JServer;

import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.*;
import java.util.HashMap;
import java.util.List;

import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.export.JRPrintServiceExporter;
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;

/**
*
* @author Administrator
*/

public class JasperPrintTest {

private static JServer server = null;

public JasperPrintTest(String webServiceUrl, String username, String password){

    server = new JServer();
    server.setUsername(username);
    server.setPassword(password);
    server.setUrl(webServiceUrl);
}

public List list(String uri) throws Exception{
    ResourceDescriptor rd = new ResourceDescriptor();
    rd.setWsType(ResourceDescriptor.TYPE_FOLDER);
    rd.setUriString(uri);
    return server.getWSClient().list(rd);
}

public ResourceDescriptor get(String uri) throws Exception{
   return get(uri, null);
}

public ResourceDescriptor get(String uri, List arg) throws Exception{

   ResourceDescriptor rd = new ResourceDescriptor();
   rd.setWsType(ResourceDescriptor.TYPE_REPORTUNIT);
   rd.setUriString(uri);
   return server.getWSClient().get(rd, null,arg);
}


public JasperPrint runReports(String reportUnit, Map params) throws Exception{
   ResourceDescriptor rd = new ResourceDescriptor();
   rd.setWsType(ResourceDescriptor.TYPE_REPORTUNIT);
   rd.setUriString(reportUnit);
   return server.getWSClient().runReport(rd, params);
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws Exception {
    // TODO code application logic here
    String webServiceUrl="http://localhost:8080/jasperserver-pro/services/repository";
    String username= "jasperadmin";
    String password = "jasperadmin";
    String printer = "Foxit Reader PDF Printer";
    String reporturi = "/reports/samples/AllAccounts";


    JasperPrintTest object = new JasperPrintTest(webServiceUrl,username,password);
    JasperPrint jasperPrint = new JasperPrint();
    Map parameterMap = new HashMap();
    try {
        jasperPrint = object.runReports(reporturi, parameterMap);
    } catch (Exception ex) {
        Logger.getLogger(ClassForm.class.getName()).log(Level.SEVERE, null, ex);
    }

    PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
    PrintService printService = null;
    for(PrintService ps : printServices){
        if(ps.getName().equals(printer)){
            printService = ps;
            break;
        }
    }

    if(printService !=null)
    {
        JRExporter jrExporter = new JRPrintServiceExporter();
        jrExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        jrExporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, printService);
        jrExporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, 
                printService.getAttributes());
        jrExporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
        jrExporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE);
        try {
            jrExporter.exportReport();
        } catch (JRException ex) {
            Logger.getLogger(ClassForm.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    else
    {
        System.out.println("Printer is not defined");
    }
}
}

3/ Result:

在此处输入图片说明

Note: but everything is still not dynamic. Please notice.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM