http://sourceforge.net/tracker/?func=detail&aid=2826268&group_id=176962&atid=955896 [Large report and big pdf]
- use temporary file for pdf rendering, use less memory on the server and works better with the latest adobe reader plugin ( 9.2+ )
This commit is contained in:
parent
62ab3c9244
commit
d47ded66a3
|
@ -1,10 +1,14 @@
|
||||||
package org.adempiere.webui.window;
|
package org.adempiere.webui.window;
|
||||||
|
|
||||||
import net.sf.jasperreports.engine.JRException;
|
import java.io.File;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import net.sf.jasperreports.engine.JasperExportManager;
|
import net.sf.jasperreports.engine.JasperExportManager;
|
||||||
import net.sf.jasperreports.engine.JasperPrint;
|
import net.sf.jasperreports.engine.JasperPrint;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.adempiere.webui.component.Window;
|
import org.adempiere.webui.component.Window;
|
||||||
|
import org.compiere.util.CLogger;
|
||||||
import org.zkoss.util.media.AMedia;
|
import org.zkoss.util.media.AMedia;
|
||||||
import org.zkoss.zkex.zul.Borderlayout;
|
import org.zkoss.zkex.zul.Borderlayout;
|
||||||
import org.zkoss.zkex.zul.Center;
|
import org.zkoss.zkex.zul.Center;
|
||||||
|
@ -15,12 +19,13 @@ import org.zkoss.zul.Toolbarbutton;
|
||||||
|
|
||||||
public class ZkJRViewer extends Window {
|
public class ZkJRViewer extends Window {
|
||||||
|
|
||||||
/**
|
private static final long serialVersionUID = 2021796699437770927L;
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = -7657218073670612078L;
|
|
||||||
private JasperPrint jasperPrint;
|
private JasperPrint jasperPrint;
|
||||||
|
|
||||||
|
/** Logger */
|
||||||
|
private static CLogger log = CLogger.getCLogger(ZkJRViewer.class);
|
||||||
|
|
||||||
public ZkJRViewer(JasperPrint jasperPrint, String title) {
|
public ZkJRViewer(JasperPrint jasperPrint, String title) {
|
||||||
this.setTitle(title);
|
this.setTitle(title);
|
||||||
this.jasperPrint = jasperPrint;
|
this.jasperPrint = jasperPrint;
|
||||||
|
@ -52,16 +57,36 @@ public class ZkJRViewer extends Window {
|
||||||
iframe.setHeight("100%");
|
iframe.setHeight("100%");
|
||||||
iframe.setWidth("100%");
|
iframe.setWidth("100%");
|
||||||
|
|
||||||
byte[] data = null;
|
|
||||||
try {
|
try {
|
||||||
data = JasperExportManager.exportReportToPdf(jasperPrint);
|
String path = System.getProperty("java.io.tmpdir");
|
||||||
} catch (JRException e) {
|
String prefix = makePrefix(jasperPrint.getName());
|
||||||
e.printStackTrace();
|
if (log.isLoggable(Level.FINE))
|
||||||
}
|
{
|
||||||
AMedia media = new AMedia(getTitle(), "pdf", "application/pdf", data);
|
log.log(Level.FINE, "Path="+path + " Prefix="+prefix);
|
||||||
iframe.setContent(media);
|
}
|
||||||
|
File file = File.createTempFile(prefix, ".pdf", new File(path));
|
||||||
|
JasperExportManager.exportReportToPdfFile(jasperPrint, file.getAbsolutePath());
|
||||||
|
AMedia media = new AMedia(getTitle(), "pdf", "application/pdf", file, true);
|
||||||
|
iframe.setContent(media);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||||
|
throw new AdempiereException("Failed to render report.", e);
|
||||||
|
}
|
||||||
center.appendChild(iframe);
|
center.appendChild(iframe);
|
||||||
|
|
||||||
this.setBorder("normal");
|
this.setBorder("normal");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String makePrefix(String name) {
|
||||||
|
StringBuffer prefix = new StringBuffer();
|
||||||
|
char[] nameArray = name.toCharArray();
|
||||||
|
for (char ch : nameArray) {
|
||||||
|
if (Character.isLetterOrDigit(ch)) {
|
||||||
|
prefix.append(ch);
|
||||||
|
} else {
|
||||||
|
prefix.append("_");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return prefix.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,9 +93,6 @@ import org.zkoss.zul.Vbox;
|
||||||
*/
|
*/
|
||||||
public class ZkReportViewer extends Window implements EventListener {
|
public class ZkReportViewer extends Window implements EventListener {
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 1492321933977608137L;
|
private static final long serialVersionUID = 1492321933977608137L;
|
||||||
/** Window No */
|
/** Window No */
|
||||||
private int m_WindowNo;
|
private int m_WindowNo;
|
||||||
|
@ -327,7 +324,15 @@ public class ZkReportViewer extends Window implements EventListener {
|
||||||
AMedia media = null;
|
AMedia media = null;
|
||||||
Listitem selected = previewType.getSelectedItem();
|
Listitem selected = previewType.getSelectedItem();
|
||||||
if (selected == null || "PDF".equals(selected.getValue())) {
|
if (selected == null || "PDF".equals(selected.getValue())) {
|
||||||
media = new AMedia(getTitle(), "pdf", "application/pdf", m_reportEngine.createPDFData());
|
String path = System.getProperty("java.io.tmpdir");
|
||||||
|
String prefix = makePrefix(m_reportEngine.getName());
|
||||||
|
if (log.isLoggable(Level.FINE))
|
||||||
|
{
|
||||||
|
log.log(Level.FINE, "Path="+path + " Prefix="+prefix);
|
||||||
|
}
|
||||||
|
File file = File.createTempFile(prefix, ".pdf", new File(path));
|
||||||
|
m_reportEngine.createPDF(file);
|
||||||
|
media = new AMedia(getTitle(), "pdf", "application/pdf", file, true);
|
||||||
} else if ("HTML".equals(previewType.getSelectedItem().getValue())) {
|
} else if ("HTML".equals(previewType.getSelectedItem().getValue())) {
|
||||||
String path = System.getProperty("java.io.tmpdir");
|
String path = System.getProperty("java.io.tmpdir");
|
||||||
String prefix = makePrefix(m_reportEngine.getName());
|
String prefix = makePrefix(m_reportEngine.getName());
|
||||||
|
|
Loading…
Reference in New Issue