IDEMPIERE-3995 Excel Export - Include Embedded Print Format

This commit is contained in:
Heng Sin Low 2019-06-26 10:36:37 +08:00
parent c573b240e9
commit d3fd2e8547
4 changed files with 92 additions and 12 deletions

View File

@ -125,7 +125,7 @@ public abstract class AbstractExcelExporter
private HSSFDataFormat m_dataFormat; private HSSFDataFormat m_dataFormat;
private HSSFFont m_fontHeader = null; private HSSFFont m_fontHeader = null;
private HSSFFont m_fontDefault = null; private HSSFFont m_fontDefault = null;
private Language m_lang = null; protected Language m_lang = null;
private int m_sheetCount = 0; private int m_sheetCount = 0;
// //
private int m_colSplit = 1; private int m_colSplit = 1;
@ -415,8 +415,7 @@ public abstract class AbstractExcelExporter
* @param out * @param out
* @throws Exception * @throws Exception
*/ */
private void export(OutputStream out) protected void export(OutputStream out) throws Exception
throws Exception
{ {
HSSFSheet sheet= createTableSheet(); HSSFSheet sheet= createTableSheet();
String sheetName = null; String sheetName = null;

View File

@ -13,8 +13,13 @@
*****************************************************************************/ *****************************************************************************/
package org.adempiere.print.export; package org.adempiere.print.export;
import java.io.OutputStream;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.logging.Level;
import javax.print.attribute.standard.MediaSizeName; import javax.print.attribute.standard.MediaSizeName;
@ -47,30 +52,37 @@ extends AbstractExcelExporter
{ {
private PrintData m_printData; private PrintData m_printData;
private MPrintFormat m_printFormat; private MPrintFormat m_printFormat;
private Map<MPrintFormatItem, PrintData> childPrintFormatDetails;
private ArrayList<Object> columns;
private MQuery m_query; private MQuery m_query;
public PrintDataExcelExporter(PrintData printData, MPrintFormat printFormat, Boolean[] colSuppressRepeats) { public PrintDataExcelExporter(PrintData printData, MPrintFormat printFormat) {
this(printData, printFormat, colSuppressRepeats, null); this(printData, printFormat, null, null);
} }
public PrintDataExcelExporter(PrintData printData, MPrintFormat printFormat, Boolean[] colSuppressRepeats, MQuery query) { public PrintDataExcelExporter(PrintData printData, MPrintFormat printFormat, Map<MPrintFormatItem, PrintData> childPrintFormatDetails, Boolean[] colSuppressRepeats) {
this(printData, printFormat, childPrintFormatDetails, colSuppressRepeats, null);
}
public PrintDataExcelExporter(PrintData printData, MPrintFormat printFormat, Map<MPrintFormatItem, PrintData> childPrintFormatDetails, Boolean[] colSuppressRepeats, MQuery query) {
super(); super();
this.m_printData = printData; this.m_printData = printData;
this.m_printFormat = printFormat; this.m_printFormat = printFormat;
this.childPrintFormatDetails = childPrintFormatDetails;
this.colSuppressRepeats = colSuppressRepeats; this.colSuppressRepeats = colSuppressRepeats;
this.m_query = query; this.m_query = query;
} }
@Override @Override
public int getColumnCount() { public int getColumnCount() {
return m_printFormat.getItemCount(); return columns.size();
} }
private PrintDataElement getPDE(int row, int col) { private PrintDataElement getPDE(int row, int col) {
if (m_printData.getRowIndex() != row) if (m_printData.getRowIndex() != row)
m_printData.setRowIndex(row); m_printData.setRowIndex(row);
// //
MPrintFormatItem item = m_printFormat.getItem(col); MPrintFormatItem item = (MPrintFormatItem) columns.get(col);
Object obj = null; Object obj = null;
if (item.isTypeField() || item.isTypePrintFormat() && item.isImageField()) { if (item.isTypeField() || item.isTypePrintFormat() && item.isImageField()) {
@ -123,12 +135,50 @@ extends AbstractExcelExporter
value = pde.getValueDisplay(getLanguage()); value = pde.getValueDisplay(getLanguage());
} }
// //
MPrintFormatItem item = null;
Object colObj = columns.get(col);
if (colObj instanceof MPrintFormatItem)
item = (MPrintFormatItem) colObj;
if(item != null && item.getAD_PrintFormatChild_ID()!=0)
{
MPrintFormat mPrintFormat = null;
if(childPrintFormatDetails!=null)
{
for (Iterator<Map.Entry<MPrintFormatItem,PrintData>> iter = childPrintFormatDetails.entrySet().iterator(); iter.hasNext();)
{
try {
Map.Entry<MPrintFormatItem,PrintData> entry = (Map.Entry<MPrintFormatItem,PrintData>) iter.next();
MPrintFormatItem mPrintFormatItem = (MPrintFormatItem)entry.getKey();
if (mPrintFormatItem.equals(item))
{
mPrintFormat = new MPrintFormat(getCtx(), mPrintFormatItem.getAD_PrintFormatChild_ID(), null);
PrintData printData = (PrintData)entry.getValue();
PrintDataExcelExporter exp =new PrintDataExcelExporter(printData, mPrintFormat);
exp.exportToWorkbook(m_workbook, m_lang);
break;
}
}
catch(Exception ex)
{
log.log(Level.WARNING, ex.getMessage(), ex);
break;
}
}
}
}
return value; return value;
} }
@Override @Override
public String getHeaderName(int col) { public String getHeaderName(int col) {
return m_printFormat.getItem(col).getPrintName(getLanguage()); Object colObj = columns.get(col);
if (colObj instanceof MPrintFormatItem) {
MPrintFormatItem item = (MPrintFormatItem) colObj;
return item.getPrintName(getLanguage());
} else {
return "";
}
} }
@Override @Override
@ -138,8 +188,10 @@ extends AbstractExcelExporter
@Override @Override
public boolean isColumnPrinted(int col) { public boolean isColumnPrinted(int col) {
MPrintFormatItem item = m_printFormat.getItem(col); if (columns != null && col < columns.size())
return item.isPrinted(); return true;
else
return false;
} }
@Override @Override
@ -232,6 +284,21 @@ extends AbstractExcelExporter
return cellFormat; return cellFormat;
} }
@Override
protected void export(OutputStream out) throws Exception {
columns = new ArrayList<>();
for (int col = 0; col < m_printFormat.getItemCount(); col++)
{
MPrintFormatItem item = m_printFormat.getItem(col);
if (item.isPrinted())
{
columns.add(item);
}
}
super.export(out);
}
@Override @Override
protected void createParameter(HSSFSheet sheet) { protected void createParameter(HSSFSheet sheet) {
if (!m_printFormat.isForm()) { if (!m_printFormat.isForm()) {

View File

@ -1470,7 +1470,7 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
throws Exception throws Exception
{ {
Boolean [] colSuppressRepeats = m_layout == null || m_layout.colSuppressRepeats == null? LayoutEngine.getColSuppressRepeats(m_printFormat):m_layout.colSuppressRepeats; Boolean [] colSuppressRepeats = m_layout == null || m_layout.colSuppressRepeats == null? LayoutEngine.getColSuppressRepeats(m_printFormat):m_layout.colSuppressRepeats;
PrintDataExcelExporter exp = new PrintDataExcelExporter(getPrintData(), getPrintFormat(), colSuppressRepeats, m_query); PrintDataExcelExporter exp = new PrintDataExcelExporter(getPrintData(), getPrintFormat(), m_layout.getChildPrintFormatDetails(), colSuppressRepeats, m_query);
exp.export(outFile, language); exp.export(outFile, language);
} }

View File

@ -41,6 +41,7 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
@ -226,6 +227,8 @@ public class LayoutEngine implements Pageable, Printable, Doc
/** Image Size */ /** Image Size */
public static Dimension IMAGE_SIZE = new Dimension(10,10); public static Dimension IMAGE_SIZE = new Dimension(10,10);
private Map<MPrintFormatItem,PrintData> childPrintFormatDetails = new HashMap<MPrintFormatItem,PrintData>();
public Boolean[] colSuppressRepeats; public Boolean[] colSuppressRepeats;
static { static {
@ -1279,6 +1282,7 @@ public class LayoutEngine implements Pageable, Printable, Doc
return null; return null;
if (log.isLoggable(Level.FINE)) if (log.isLoggable(Level.FINE))
log.fine(includedData.toString()); log.fine(includedData.toString());
setChildPrintFormatDetails(item, includedData); //map printdata and printformat item
// //
element = layoutTable (format, includedData, item.getXSpace()); element = layoutTable (format, includedData, item.getXSpace());
// handle multi page tables // handle multi page tables
@ -1980,6 +1984,16 @@ public class LayoutEngine implements Pageable, Printable, Doc
return m_PrintInfo; return m_PrintInfo;
} }
public void setChildPrintFormatDetails(MPrintFormatItem printFormatItem, PrintData printData)
{
childPrintFormatDetails.put(printFormatItem, printData);
}
public Map<MPrintFormatItem, PrintData> getChildPrintFormatDetails()
{
return childPrintFormatDetails;
}
public static Boolean [] getColSuppressRepeats (MPrintFormat format){ public static Boolean [] getColSuppressRepeats (MPrintFormat format){
if (format.isForm()) if (format.isForm())
return null; return null;