Adding Ajax Behavior for Generate PDF in Apache wicket

Step 1: Override the 'AbstractAjaxBehavior' class functionality as below.

public abstract class ClassName extends AbstractAjaxBehavior {
      public void initiate(AjaxRequestTarget target) {
        target.appendJavascript("window.open('" + getCallbackUrl()
            + "', '', 'scrollbars=yes,location=no,menuBar=no,resizable=yes,status=no,toolbar=no')");
    }
    // Called when a request to a behavior is received.
    @Override
    public void onRequest() {
        RequestCycle rc = getComponent().getRequestCycle();
        final WebResponse webResponse = (WebResponse) getComponent().getRequestCycle().getResponse();
        webResponse.setLastModifiedTime(Time.now());
        webResponse.setContentType("application/pdf");
        webResponse.setHeader("Content-Disposition", "inline; filename=\"" + getFileName() + "\"");
        rc.setRequestTarget(new IRequestTarget() {
            public void respond(RequestCycle requestCycle) {
                OutputStreamWriter writer = null;
                try {
                    OutputStream stream = webResponse.getOutputStream();
                    writer = new OutputStreamWriter(stream, "ISO-8859-1");
                    writer.write(getStringToWriteonPDF());
                    writer.flush();
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                } finally {
                    try {
                        writer.close();
                    } catch (IOException ioException) {
                    }
                }
            }
            public void detach(RequestCycle requestCycle) {
            }
        });
    }
    protected abstract String getFileName();
    protected abstract String getStringToWriteonPDF();
}
Step 2: Use the override behavior in Component class

public void onClick(AjaxRequestTarget target) {
  ClassName  behavior =  new ClassName () {
             private static final long serialVersionUID = 1L;
             @Override
             protected String getStringToWriteonPDF() {
                  return "out put of PDF-it may get from Source (Database/webservices)";
             }
             @Override
             protected String getFileName() {
                  return "File Name of PDF";
             }
          };
                  add(behavior);
             behavior.initiate(target);
}

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...