📄 fopprintapplet.java
字号:
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 + -