⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fopprintapplet.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    protected void printFoFromHttp(String server, String screenUrl) throws Exception {        InputSource source = this.getScreenFromHttp(server, screenUrl);        this.renderFO(this.getScreenUri(screenUrl), source);    }    protected InputSource getScreenFromHttp(String server, String screenUrl) throws Exception {        String screen = this.getScreenUri(screenUrl);        Map params = this.getParameters(screenUrl);        Iterator i = params.keySet().iterator();        String paramString = "?screenUri=" + URLEncoder.encode(screen, "UTF-8");        while (i.hasNext()) {            String key = (String) i.next();            Object val = params.get(key);            paramString = paramString + "&" + key + "=" + URLEncoder.encode(val.toString(), "UTF-8");        }        URL url = new URL(server + requestPath + paramString);        URLConnection con = url.openConnection();        con.setDoInput(true);        con.setDoOutput(true);        con.setUseCaches(false);        con.setRequestProperty("Content-type", "application/x-www-form-urlencoded");        PrintWriter toServlet = new PrintWriter(con.getOutputStream());        toServlet.flush();        toServlet.close();        InputStream in = con.getInputStream();        BufferedReader reader = new BufferedReader(new InputStreamReader(in));        StringBuffer buf = new StringBuffer();        String line;        while ((line = reader.readLine()) != null) {            buf.append(line);            buf.append(System.getProperty("line.separator"));        }        reader.close();        // convert the base64 string to bytes        byte[] bytes = Base64.decodeBase64(buf.toString().getBytes());        System.out.println(new String(bytes));        return new InputSource(new ByteArrayInputStream(bytes));    }    protected InputSource getScreenFromRmi(String lookup, String screenUrl) throws Exception {        FopPrintRemote remote = (FopPrintRemote) Naming.lookup(lookup);        if (remote != null) {            String screen = this.getScreenUri(screenUrl);            Map params = this.getParameters(screenUrl);            byte[] fo = remote.getXslFo(screen, params);            return new InputSource(new ByteArrayInputStream(fo));        }        return null;    }    protected String getScreenUri(String screen) {        return screen.indexOf("?") != -1 ? screen.substring(0, screen.indexOf("?")) : screen;    }    protected Map getParameters(String screen) {        Map params = parseQueryString(screen.substring(screen.indexOf("?") + 1));        params.put("locale", Locale.getDefault());        System.out.println("Parsed parameters: " + params);        return params;    }    protected synchronized void setJobComplete(String jobName, boolean fail) {        String screen = null;        Iterator i = jobQueue.keySet().iterator();        while (i.hasNext()) {            String s = (String) i.next();            String internalName = s.substring(s.indexOf("#") + 1);            if (jobName.equals(internalName)) {                screen = s;            }        }        jobQueue.remove(screen);        if (fail) {            noPrint.add(screen);        }        if (jobQueue.size() == 0) {            try {                this.sendComplete();            } catch (Exception e) {                e.printStackTrace();            }        }    }    protected void sendComplete() throws Exception {        // send the applet settings (via post) back to the server        this.postAppletSettings();        // now redirect to the done page to set cookies on browser        this.getAppletContext().showStatus("Sending final update to server...");        String path = "/webtools/control/printComplete?sessionId=" + URLEncoder.encode(sessionId, "UTF-8");        URL url = new URL(serverUrl + path);        System.out.println("Returning complete: " + url.toExternalForm());        this.getAppletContext().showStatus("Finished.");        this.getAppletContext().showDocument(url);    }    protected void postAppletSettings() throws Exception {        this.getAppletContext().showStatus("Updating settings on server...");        StringBuffer buf = new StringBuffer();        buf.append("sessionId=").append(sessionId);        Iterator i = jobList.keySet().iterator();        while (i.hasNext()) {            String screen = (String) i.next();            PrintSettings s = (PrintSettings) jobList.get(screen);            if (!noPrint.contains(screen)) {                // serialize the print settings                String hex = null;                byte[] bytes;                if ((bytes = getBytes(s)) != null) {                    hex = toHex(bytes);                    System.out.println("Hex string created; receive: " + hex.length() + " characters");                }                // add settings to call back                if (hex != null) {                    // if settings exist                    if (buf.length() > 0) {                       buf.append("&");                    }                    buf.append(URLEncoder.encode(this.getScreenUri(screen), "UTF-8"));                    buf.append("=");                    buf.append(URLEncoder.encode(hex, "UTF-8"));                }            }        }        String path = "/webtools/control/updatePrintSettings";        URL url = new URL(serverUrl + path);        System.out.println("Posting settings back to: " + url.toExternalForm());        URLConnection con = url.openConnection();        con.setDoInput(true);        con.setDoOutput(true);        con.setUseCaches(false);        con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");        // send the post data        DataOutputStream out = new DataOutputStream(con.getOutputStream());        out.writeBytes(buf.toString());        out.flush();        out.close();        // receive the response        InputStream in = con.getInputStream();        BufferedReader reader = new BufferedReader(new InputStreamReader(in));        String resp = reader.readLine();        reader.close();        System.out.println("Response was: " + resp);    }    protected PrintService getPrintService(String jobName, String printerName) {        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();        PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, aset);        PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();        PrintService service = null;        if (printService.length > 0) {            if (!resetCookies && printerName != null && printerName.length() > 0) {                System.out.println("Looking for available printer: " + printerName);                for (int i = 0; i < printService.length; i++) {                    PrintService svc = printService[i];                    if (svc.getName().equals(printerName)) {                        service = svc;                    }                }            }            if (service == null) {                aset.add(new JobName(jobName.substring(jobName.indexOf("#") + 1), Locale.getDefault()));                this.getAppletContext().showStatus("Requesting printer settings... [" + jobName.substring(jobName.indexOf("#") + 1) + "]");                try {                    service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, aset);                } catch (Throwable t) {                    t.printStackTrace();                }                if (service == null) {                    System.out.println("Null print service returned.");                } else {                    System.out.println("Print service received: " + service.getName());                }            }        }        return service;    }    protected PrintSettings getPrintSettings(String jobName, String printerInfo) {        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();        PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, aset);        PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();        PrintSettings settings = null;        if (printService.length > 0) {            PrintService service = null;            if (!resetCookies && printerInfo != null && printerInfo.length() > 0) {                System.out.println("Attemping to deserialize printer info hex string.");                settings = (PrintSettings) getObject(toByteArray(printerInfo));                if (settings != null) {                    System.out.println("Looking for available printer: " + settings.getPrinterName());                    service = settings.getPrintService();                }            }            if (service == null) {                aset.add(new JobName(jobName.substring(jobName.indexOf("#") + 1), Locale.getDefault()));                this.getAppletContext().showStatus("Requesting printer settings... [" + jobName.substring(jobName.indexOf("#") + 1) + "]");                try {                    service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, aset);                } catch (Throwable t) {                    t.printStackTrace();                }                if (service == null) {                    System.out.println("Null print service returned.");                } else {                    System.out.println("Print service received: " + service.getName());                    settings = new PrintSettings(service, aset);                }            }        }        return settings;    }    /**     * Renders an FO inputsource to the selected printer.     */    protected void renderFO(final String name, final InputSource foFile) throws Exception {        //PrintService service = (PrintService) jobQueue.get(name);        PrintSettings settings = (PrintSettings) jobQueue.get(name);        if (settings != null) {            this.getAppletContext().showStatus("Rendering PDF...");            try {                PrintRenderer renderer = new PrintRenderer(name, settings);                Driver driver = new Driver(foFile, null);                driver.setRenderer(renderer);                driver.run();            } catch (Exception ex) {                ex.printStackTrace();            }        }    }    private static String parseName(String s, StringBuffer sb) {        sb.setLength(0);        for (int i = 0; i < s.length(); i++) {            char c = s.charAt(i);            switch (c) {                case '+':                    sb.append(' ');                    break;                case '%':                    try {                        sb.append((char) Integer.parseInt(s.substring(i + 1, i + 3), 16));                        i += 2;                    } catch (NumberFormatException e) {                        throw new IllegalArgumentException();                    } catch (StringIndexOutOfBoundsException e) {                        String rest = s.substring(i);                        sb.append(rest);                        if (rest.length() == 2)                            i++;                    }                    break;                default:                    sb.append(c);                    break;            }        }        return sb.toString();    }    private static Map parseQueryString(String s) {        System.out.println("Parsing string: " + s);        if (s == null) {            throw new IllegalArgumentException();        }        HashMap ht = new HashMap();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -