Search in sources :

Example 1 with FormPreviewPanel

use of com.servoy.j2db.printing.FormPreviewPanel in project servoy-client by Servoy.

the class WebForm method print.

// public void print(boolean showDialogs, boolean printCurrentRecordOnly, boolean showPrinterSelectDialog, int zoomFactor, PrinterJob printerJob)
// {
// print(showDialogs, printCurrentRecordOnly, showPrinterSelectDialog, printerJob);
// }
/**
 * @see com.servoy.j2db.IFormUIInternal#print(boolean, boolean, boolean, java.awt.print.PrinterJob)
 */
public void print(boolean showDialogs, boolean printCurrentRecordOnly, boolean showPrinterSelectDialog, PrinterJob printerJob) {
    IFoundSetInternal fs = formController.getFoundSet();
    try {
        if (printCurrentRecordOnly) {
            fs = fs.copyCurrentRecordFoundSet();
        }
    } catch (ServoyException e1) {
        Debug.error(e1);
    }
    IApplication application = formController.getApplication();
    ByteArrayOutputStream baos = null;
    MainPage page = null;
    if (printerJob == null) {
        page = (MainPage) findPage();
        if (page == null) {
            IMainContainer tmp = ((FormManager) application.getFormManager()).getCurrentContainer();
            if (tmp instanceof MainPage)
                page = (MainPage) tmp;
        }
    // if "page" is still null then there is no wicket front-end for this client - so printing is not intended to reach the client; print on the server instead
    // (can happen for batch processors for example)
    }
    if (page != null) {
        baos = new ByteArrayOutputStream();
        StreamPrintServiceFactory[] factories = null;
        DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
        ClassLoader savedClassLoader = Thread.currentThread().getContextClassLoader();
        try {
            Thread.currentThread().setContextClassLoader(((PluginManager) application.getPluginManager()).getClassLoader());
            // $NON-NLS-1$
            factories = StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor, "application/pdf");
            if (factories == null || factories.length == 0) {
                // $NON-NLS-1$
                Debug.error("No suitable pdf printer found");
                return;
            }
        } finally {
            Thread.currentThread().setContextClassLoader(savedClassLoader);
        }
        try {
            FormPreviewPanel fpp = new FormPreviewPanel(application, formController, fs);
            // AWT stuff happens here, so execute it in the AWT Event Thread - else exceptions can occur
            // for example in JEditorPane while getting the preferred size & stuff
            processFppInAWTEventQueue(fpp, application);
            StreamPrintService sps = factories[0].getPrintService(baos);
            Doc doc = new SimpleDoc(fpp.getPageable(), flavor, null);
            PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
            sps.createPrintJob().print(doc, pras);
            fpp.destroy();
        } catch (Exception ex) {
            // $NON-NLS-1$
            application.reportError(application.getI18NMessage("servoy.formPanel.error.printDocument"), ex);
        }
        // $NON-NLS-1$
        String contentType = "application/pdf";
        // BTW, "application/octet-stream" works for all browsers, but it is not that accurate
        if (// if it's not batch processor/jsp, because if it is, then getClientInfo() gives NullPointerException
        application.getApplicationType() != IApplication.HEADLESS_CLIENT) {
            ClientInfo info = Session.get().getClientInfo();
            if (info instanceof WebClientInfo) {
                String userAgent = ((WebClientInfo) info).getProperties().getNavigatorUserAgent();
                if (// $NON-NLS-1$
                userAgent != null && userAgent.toLowerCase().contains("safari")) {
                    // $NON-NLS-1$
                    contentType = "application/octet-stream";
                }
            }
        }
        // $NON-NLS-1$ //$NON-NLS-2$
        String url = page.serveResource(formController.getName() + ".pdf", baos.toByteArray(), contentType, "attachment");
        // $NON-NLS-1$
        page.setShowURLCMD(url, "_self", null, 0, false);
    } else {
        try {
            FormPreviewPanel fpp = new FormPreviewPanel(application, formController, fs);
            // AWT stuff happens here, so execute it in the AWT Event Thread - else exceptions can occur
            // for example in JEditorPane while getting the preferred size & stuff
            processFppInAWTEventQueue(fpp, application);
            PrintPreview.startPrinting(application, fpp.getPageable(), printerJob, formController.getPreferredPrinterName(), false, true);
            fpp.destroy();
        } catch (Exception ex) {
            // $NON-NLS-1$
            application.reportError(application.getI18NMessage("servoy.formPanel.error.printDocument"), ex);
        }
    }
}
Also used : WebClientInfo(org.apache.wicket.protocol.http.request.WebClientInfo) IFoundSetInternal(com.servoy.j2db.dataprocessing.IFoundSetInternal) FormPreviewPanel(com.servoy.j2db.printing.FormPreviewPanel) ByteArrayOutputStream(java.io.ByteArrayOutputStream) StreamPrintService(javax.print.StreamPrintService) ServoyException(com.servoy.j2db.util.ServoyException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ServoyException(com.servoy.j2db.util.ServoyException) HashPrintRequestAttributeSet(javax.print.attribute.HashPrintRequestAttributeSet) PrintRequestAttributeSet(javax.print.attribute.PrintRequestAttributeSet) IApplication(com.servoy.j2db.IApplication) SimpleDoc(javax.print.SimpleDoc) IBasicFormManager(com.servoy.j2db.IBasicFormManager) FormManager(com.servoy.j2db.FormManager) IMainContainer(com.servoy.j2db.IMainContainer) Doc(javax.print.Doc) SimpleDoc(javax.print.SimpleDoc) WebClientInfo(org.apache.wicket.protocol.http.request.WebClientInfo) ClientInfo(org.apache.wicket.request.ClientInfo) StreamPrintServiceFactory(javax.print.StreamPrintServiceFactory) DocFlavor(javax.print.DocFlavor) HashPrintRequestAttributeSet(javax.print.attribute.HashPrintRequestAttributeSet)

Example 2 with FormPreviewPanel

use of com.servoy.j2db.printing.FormPreviewPanel in project servoy-client by Servoy.

the class SwingForm method print.

/**
 * @see com.servoy.j2db.IFormUIInternal#print(boolean, boolean, boolean, java.awt.print.PrinterJob)
 */
public void print(boolean showDialogs, boolean printCurrentRecordOnly, boolean showPrinterSelectDialog, PrinterJob printerJob) {
    IFoundSetInternal fs = formController.getFoundSet();
    if (!printCurrentRecordOnly) {
        if (showDialogs) {
            int option = willingToPrint(fs);
            if (option == 2) {
                printCurrentRecordOnly = true;
            } else if (option == 1) {
                // cancel
                return;
            }
        }
    }
    IApplication application = formController.getApplication();
    try {
        // $NON-NLS-1$
        application.blockGUI(Messages.getString("servoy.formPanel.status.printProgress"));
        if (printCurrentRecordOnly) {
            fs = fs.copyCurrentRecordFoundSet();
        }
        FormPreviewPanel fpp = new FormPreviewPanel(application, formController, fs);
        fpp.process();
        PrintPreview.startPrinting(application, fpp.getPageable(), printerJob, formController.getPreferredPrinterName(), showPrinterSelectDialog, false);
        fpp.destroy();
    } catch (Exception ex) {
        // $NON-NLS-1$
        application.reportError(Messages.getString("servoy.formPanel.error.printDocument"), ex);
    } finally {
        application.releaseGUI();
    }
}
Also used : IApplication(com.servoy.j2db.IApplication) IFoundSetInternal(com.servoy.j2db.dataprocessing.IFoundSetInternal) FormPreviewPanel(com.servoy.j2db.printing.FormPreviewPanel) Point(java.awt.Point)

Example 3 with FormPreviewPanel

use of com.servoy.j2db.printing.FormPreviewPanel in project servoy-client by Servoy.

the class SwingForm method printXML.

/**
 * @see com.servoy.j2db.IFormUIInternal#printXML(boolean)
 */
public String printXML(boolean printCurrentRecordOnly) {
    IApplication application = formController.getApplication();
    IFoundSetInternal fs = formController.getFoundSet();
    try {
        // $NON-NLS-1$
        application.blockGUI(Messages.getString("servoy.formPanel.status.xmlPrinting"));
        if (printCurrentRecordOnly) {
            fs = fs.copyCurrentRecordFoundSet();
        }
        FormPreviewPanel fpp = new FormPreviewPanel(application, formController, fs);
        fpp.process();
        StringWriter w = new StringWriter();
        ((PageList) fpp.getPageable()).toXML(w);
        fpp.destroy();
        return w.toString();
    } catch (Throwable ex) {
        // $NON-NLS-1$
        application.reportError(Messages.getString("servoy.formPanel.error.printDocument"), ex);
    } finally {
        application.releaseGUI();
    }
    return null;
}
Also used : IApplication(com.servoy.j2db.IApplication) StringWriter(java.io.StringWriter) IFoundSetInternal(com.servoy.j2db.dataprocessing.IFoundSetInternal) FormPreviewPanel(com.servoy.j2db.printing.FormPreviewPanel) PageList(com.servoy.j2db.printing.PageList)

Example 4 with FormPreviewPanel

use of com.servoy.j2db.printing.FormPreviewPanel in project servoy-client by Servoy.

the class WebForm method printXML.

/**
 * @see com.servoy.j2db.IFormUIInternal#printXML(boolean)
 */
public String printXML(boolean printCurrentRecordOnly) {
    IApplication application = formController.getApplication();
    IFoundSetInternal fs = formController.getFoundSet();
    try {
        if (printCurrentRecordOnly) {
            fs = fs.copyCurrentRecordFoundSet();
        }
        FormPreviewPanel fpp = new FormPreviewPanel(application, formController, fs);
        // AWT stuff happens here, so execute it in the AWT Event Thread - else exceptions can occur
        // for example in JEditorPane while getting the preferred size & stuff
        processFppInAWTEventQueue(fpp, application);
        StringWriter w = new StringWriter();
        ((PageList) fpp.getPageable()).toXML(w);
        fpp.destroy();
        return w.toString();
    } catch (Throwable ex) {
        // $NON-NLS-1$
        application.reportError(application.getI18NMessage("servoy.formPanel.error.printDocument"), ex);
    }
    return null;
}
Also used : IApplication(com.servoy.j2db.IApplication) StringWriter(java.io.StringWriter) IFoundSetInternal(com.servoy.j2db.dataprocessing.IFoundSetInternal) FormPreviewPanel(com.servoy.j2db.printing.FormPreviewPanel) PageList(com.servoy.j2db.printing.PageList)

Aggregations

IApplication (com.servoy.j2db.IApplication)4 IFoundSetInternal (com.servoy.j2db.dataprocessing.IFoundSetInternal)4 FormPreviewPanel (com.servoy.j2db.printing.FormPreviewPanel)4 PageList (com.servoy.j2db.printing.PageList)2 StringWriter (java.io.StringWriter)2 FormManager (com.servoy.j2db.FormManager)1 IBasicFormManager (com.servoy.j2db.IBasicFormManager)1 IMainContainer (com.servoy.j2db.IMainContainer)1 ServoyException (com.servoy.j2db.util.ServoyException)1 Point (java.awt.Point)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Doc (javax.print.Doc)1 DocFlavor (javax.print.DocFlavor)1 SimpleDoc (javax.print.SimpleDoc)1 StreamPrintService (javax.print.StreamPrintService)1 StreamPrintServiceFactory (javax.print.StreamPrintServiceFactory)1 HashPrintRequestAttributeSet (javax.print.attribute.HashPrintRequestAttributeSet)1 PrintRequestAttributeSet (javax.print.attribute.PrintRequestAttributeSet)1 WebClientInfo (org.apache.wicket.protocol.http.request.WebClientInfo)1