IDEMPIERE-1083 Print shipping label applet is not working
This commit is contained in:
parent
cee1db4c65
commit
08b1b1b2cf
|
@ -0,0 +1,120 @@
|
||||||
|
import java.awt.print.PrinterJob;
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLConnection;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import javax.print.Doc;
|
||||||
|
import javax.print.DocFlavor;
|
||||||
|
import javax.print.DocPrintJob;
|
||||||
|
import javax.print.PrintService;
|
||||||
|
import javax.print.SimpleDoc;
|
||||||
|
import javax.print.attribute.HashDocAttributeSet;
|
||||||
|
import javax.print.attribute.standard.DocumentName;
|
||||||
|
import javax.swing.JApplet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Low Heng Sin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PrintLabelApplet extends JApplet {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -3107445661561669767L;
|
||||||
|
private ArrayList<String> filepaths = new ArrayList<String>();
|
||||||
|
private int listSize = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init() {
|
||||||
|
String s = getParameter("size");
|
||||||
|
try {
|
||||||
|
listSize = Integer.parseInt(s);
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Invalid listSize param=" + s);
|
||||||
|
listSize = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < listSize; i++)
|
||||||
|
filepaths.add(getParameter("file_" + i));
|
||||||
|
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
|
System.out.println(this.getClass().getName() + " start()");
|
||||||
|
PrinterJob pjob = null;
|
||||||
|
PrintService service = null;
|
||||||
|
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
|
||||||
|
|
||||||
|
try {
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
URL url = new URL(getCodeBase(), "labeldata.jsp?filepath=" + filepaths.get(count) + "&count=" + (count + 1));
|
||||||
|
System.out.println("Protocol="+url.getProtocol());
|
||||||
|
System.out.println("Host="+url.getHost());
|
||||||
|
System.out.println("Port="+url.getPort());
|
||||||
|
System.out.println("Default Port="+url.getDefaultPort());
|
||||||
|
System.out.println("Path"+url.getPath());
|
||||||
|
System.out.println("URL="+url.toString());
|
||||||
|
URLConnection conn = url.openConnection();
|
||||||
|
int contentLength = conn.getContentLength();
|
||||||
|
System.out.println("ContentLength="+contentLength);
|
||||||
|
InputStream is = conn.getInputStream();
|
||||||
|
System.out.println("InputStream="+is.available());
|
||||||
|
byte[] data = null;
|
||||||
|
BufferedInputStream bis = new BufferedInputStream(is);
|
||||||
|
System.out.println("BufferedInputStream="+bis.available());
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
while(bis.available() > 0) {
|
||||||
|
baos.write(bis.read());
|
||||||
|
}
|
||||||
|
is.close();
|
||||||
|
bis.close();
|
||||||
|
data = baos.toByteArray();
|
||||||
|
baos.close();
|
||||||
|
System.out.println("ByteArrayOutputStream="+data.length);
|
||||||
|
if (data.length > 0) {
|
||||||
|
count ++;
|
||||||
|
if (pjob == null) {
|
||||||
|
// Create Print Job
|
||||||
|
pjob = PrinterJob.getPrinterJob();
|
||||||
|
if (pjob.printDialog())
|
||||||
|
service = pjob.getPrintService();
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DocPrintJob job = service.createPrintJob();
|
||||||
|
HashDocAttributeSet as = new HashDocAttributeSet();
|
||||||
|
as.add(new DocumentName("shipping label", null));
|
||||||
|
Doc doc = new SimpleDoc(data, flavor, as);
|
||||||
|
job.print(doc, null);
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (count >= listSize)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
this.showStatus(count + " label printed.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
this.showStatus("Failed to print label - " + e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
System.out.println(this.getClass().getName() + " destroy()");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() {
|
||||||
|
System.out.println(this.getClass().getName() + " stop()");
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,20 +13,16 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.adempiere.webui;
|
package org.adempiere.webui;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpSession;
|
|
||||||
|
|
||||||
import org.adempiere.webui.component.ToolBarButton;
|
import org.adempiere.webui.component.ToolBarButton;
|
||||||
import org.adempiere.webui.component.Window;
|
import org.adempiere.webui.component.Window;
|
||||||
import org.apache.commons.codec.binary.Base64;
|
|
||||||
import org.zkoss.zk.au.out.AuScript;
|
|
||||||
import org.zkoss.zk.ui.Executions;
|
|
||||||
import org.zkoss.zk.ui.event.Event;
|
import org.zkoss.zk.ui.event.Event;
|
||||||
import org.zkoss.zk.ui.event.EventListener;
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.event.Events;
|
import org.zkoss.zk.ui.event.Events;
|
||||||
import org.zkoss.zk.ui.util.Clients;
|
import org.zkoss.zul.Applet;
|
||||||
import org.zkoss.zul.Div;
|
import org.zkoss.zul.Div;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,31 +40,41 @@ public class LabelAppletWindow extends Window implements EventListener<Event>
|
||||||
public LabelAppletWindow(List<byte[]> list)
|
public LabelAppletWindow(List<byte[]> list)
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
String uuid = UUID.randomUUID().toString();
|
|
||||||
HttpSession session = (HttpSession) Executions.getCurrent().getDesktop().getSession().getNativeSession();
|
|
||||||
session.setAttribute(uuid, list);
|
|
||||||
Div div = new Div();
|
Div div = new Div();
|
||||||
appendChild(div);
|
appendChild(div);
|
||||||
|
|
||||||
|
Applet applet = new Applet();
|
||||||
|
applet.setCode("PrintLabelApplet.class");
|
||||||
|
applet.setArchive("labelapplet.jar");
|
||||||
|
applet.setWidth("0");
|
||||||
|
applet.setHeight("0");
|
||||||
|
applet.setParam("size", list.size() + "");
|
||||||
|
|
||||||
|
File tempFile = null;
|
||||||
|
FileOutputStream fos = null;
|
||||||
|
for(int i = 0; i < list.size(); i++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
tempFile = File.createTempFile("lblapp", Long.toString(System.nanoTime()));
|
||||||
|
fos = new FileOutputStream(tempFile);
|
||||||
|
applet.setParam("file_" + i, tempFile.getAbsolutePath());
|
||||||
|
fos.write(list.get(i));
|
||||||
|
fos.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div.appendChild(applet);
|
||||||
|
|
||||||
ToolBarButton link = new ToolBarButton();
|
ToolBarButton link = new ToolBarButton();
|
||||||
link.setLabel("Click here to close this popup after printing is completed.");
|
link.setLabel("Click here to close this popup after printing is completed.");
|
||||||
link.addEventListener(Events.ON_CLICK, this);
|
link.addEventListener(Events.ON_CLICK, this);
|
||||||
appendChild(link);
|
appendChild(link);
|
||||||
|
|
||||||
this.setBorder("normal");
|
this.setBorder("normal");
|
||||||
|
|
||||||
StringBuffer appletTag = new StringBuffer();
|
|
||||||
appletTag.append("<applet code='PrintLabelApplet.class' archive='labelapplet.jar' width=0 height=0>");
|
|
||||||
appletTag.append("<param name='key' value='" + uuid + "'>");
|
|
||||||
appletTag.append("<param name='size' value='" + list.size() + "'>");
|
|
||||||
|
|
||||||
for(int i = 0; i < list.size(); i++)
|
|
||||||
appletTag.append("<param name='data_" + i + "' value='" + Base64.encodeBase64(list.get(i)) + "'>");
|
|
||||||
|
|
||||||
appletTag.append("</applet>");
|
|
||||||
|
|
||||||
String script = "document.getElementById('" + div.getUuid() + "').innerHTML=\"" + appletTag.toString() + "\";";
|
|
||||||
Clients.response(new AuScript(div, script));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onEvent(Event event) throws Exception
|
public void onEvent(Event event) throws Exception
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
<project name="labelapplet" basedir="." default="sign">
|
||||||
|
<target name="build">
|
||||||
|
<mkdir dir="bin"/>
|
||||||
|
<javac srcdir="WEB-INF/src"
|
||||||
|
destdir="bin"
|
||||||
|
debug="on"
|
||||||
|
listfiles="yes"
|
||||||
|
excludes="**/fi/**, **/metainfo/**, **/org/**, **/web/**"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="jar" depends="build">
|
||||||
|
<jar destfile="labelapplet.jar" basedir="bin">
|
||||||
|
<manifest>
|
||||||
|
<attribute name="Built-By" value="Trek Global"/>
|
||||||
|
</manifest>
|
||||||
|
</jar>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="sign" depends="jar">
|
||||||
|
<signjar alias="labelapplet"
|
||||||
|
storepass="labelapplet"
|
||||||
|
jar="labelapplet.jar"
|
||||||
|
keystore="labelappletkeystore"/>
|
||||||
|
</target>
|
||||||
|
</project>
|
Binary file not shown.
|
@ -1,29 +1,52 @@
|
||||||
|
<%@ page trimDirectiveWhitespaces="true" %>
|
||||||
|
<%@page import="java.io.ByteArrayOutputStream"%>
|
||||||
|
<%@page import="java.io.FileInputStream"%>
|
||||||
|
<%@page import="java.io.File"%>
|
||||||
<%@page import="java.io.BufferedOutputStream"%>
|
<%@page import="java.io.BufferedOutputStream"%>
|
||||||
<%@page import="java.io.OutputStream"%>
|
<%@page import="java.io.OutputStream"%>
|
||||||
<%@ page language="java" contentType="application/octet-stream"%>
|
<%@ page language="java" contentType="application/octet-stream"%>
|
||||||
<%
|
<%
|
||||||
String key = request.getParameter("key");
|
String filepath = request.getParameter("filepath");
|
||||||
if (key == null || key.trim().length() == 0 )
|
if (filepath == null || filepath.trim().length() == 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Object object = session.getAttribute(key);
|
File file = new File(filepath);
|
||||||
if (object != null && object instanceof java.util.List) {
|
if (file.exists())
|
||||||
java.util.List list = (java.util.List)object;
|
{
|
||||||
System.out.println("size=" + list.size());
|
FileInputStream fis = null;
|
||||||
if (!list.isEmpty()) {
|
ByteArrayOutputStream baos = null;
|
||||||
byte[] data = (byte[])list.remove(0);
|
byte[] data = null;
|
||||||
System.out.println("length=" + data.length);
|
try
|
||||||
|
{
|
||||||
|
fis = new FileInputStream (file);
|
||||||
|
baos = new ByteArrayOutputStream();
|
||||||
|
byte[] buffer = new byte[1024*8]; // 8kB
|
||||||
|
int length = -1;
|
||||||
|
while ((length = fis.read(buffer)) != -1)
|
||||||
|
baos.write(buffer, 0, length);
|
||||||
|
data = baos.toByteArray();
|
||||||
|
fis.close();
|
||||||
|
baos.close();
|
||||||
|
|
||||||
response.setContentLength(data.length);
|
response.setContentLength(data.length);
|
||||||
|
|
||||||
OutputStream os = response.getOutputStream();
|
OutputStream os = response.getOutputStream();
|
||||||
BufferedOutputStream bos = new BufferedOutputStream(os);
|
BufferedOutputStream bos = new BufferedOutputStream(os);
|
||||||
bos.write(data);
|
bos.write(data);
|
||||||
bos.flush();
|
bos.flush();
|
||||||
} else {
|
bos.close();
|
||||||
|
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
response.setContentLength(0);
|
response.setContentLength(0);
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
System.out.println("key not found=" + key);
|
else
|
||||||
|
{
|
||||||
|
System.out.println("file not found=" + filepath);
|
||||||
response.setContentLength(0);
|
response.setContentLength(0);
|
||||||
}
|
}
|
||||||
%>
|
%>
|
||||||
|
|
Loading…
Reference in New Issue