diff --git a/base/src/org/adempiere/impexp/AbstractExcelExporter.java b/base/src/org/adempiere/impexp/AbstractExcelExporter.java index e8d6ec5634..ddd7f81de3 100644 --- a/base/src/org/adempiere/impexp/AbstractExcelExporter.java +++ b/base/src/org/adempiere/impexp/AbstractExcelExporter.java @@ -67,31 +67,39 @@ public abstract class AbstractExcelExporter private HSSFFont m_fontHeader = null; private HSSFFont m_fontDefault = null; private Language m_lang = null; - private int m_sheetCount = 0; + private int m_sheetCount = 0; + // + private int m_colSplit = 1; + private int m_rowSplit = 1; /** Styles cache */ private HashMap m_styles = new HashMap(); - + public AbstractExcelExporter() { m_workbook = new HSSFWorkbook(); m_dataFormat = m_workbook.createDataFormat(); } - + protected Properties getCtx() { return Env.getCtx(); } - + + protected void setFreezePane(int colSplit, int rowSplit) { + m_colSplit = colSplit; + m_rowSplit = rowSplit; + } + private String fixString(String str) { // ms excel doesn't support UTF8 charset return Util.stripDiacritics(str); } - + protected Language getLanguage() { if (m_lang == null) m_lang = Env.getLanguage(getCtx()); return m_lang; } - + private HSSFFont getFont(boolean isHeader) { HSSFFont font = null; if (isHeader) { @@ -114,7 +122,7 @@ public abstract class AbstractExcelExporter } return font; } - + /** * Get Excel number format string by given {@link NumberFormat} * @param df number format @@ -200,7 +208,7 @@ public abstract class AbstractExcelExporter } return cs_header; } - + private void fixColumnWidth(HSSFSheet sheet, int lastColumnIndex) { /* POI 3.0.1 * @@ -209,14 +217,15 @@ public abstract class AbstractExcelExporter } /**/ } - + private void closeTableSheet(HSSFSheet prevSheet, String prevSheetName, int colCount) { if (prevSheet == null) return; // fixColumnWidth(prevSheet, colCount); - prevSheet.createFreezePane(1, 1); + if (m_colSplit >= 0 || m_rowSplit >= 0) + prevSheet.createFreezePane(m_colSplit >= 0 ? m_colSplit : 0, m_rowSplit >= 0 ? m_rowSplit : 0); if (!Util.isEmpty(prevSheetName, true) && m_sheetCount > 0) { int prevSheetIndex = m_sheetCount - 1; try { @@ -230,28 +239,14 @@ public abstract class AbstractExcelExporter private HSSFSheet createTableSheet() { HSSFSheet sheet= m_workbook.createSheet(); - sheet.setFitToPage(true); - // Print Setup - HSSFPrintSetup ps = sheet.getPrintSetup(); - sheet.setAutobreaks(true); - ps.setFitWidth((short)1); - ps.setNoColor(true); - // Sheet Header - HSSFHeader header = sheet.getHeader(); - header.setRight(HSSFHeader.page()+ " / "+HSSFHeader.numPages()); - // Sheet Footer - HSSFFooter footer = sheet.getFooter(); - footer.setLeft(Adempiere.ADEMPIERE_R); - footer.setCenter(Env.getHeader(getCtx(), 0)); - Timestamp now = new Timestamp(System.currentTimeMillis()); - footer.setRight(DisplayType.getDateFormat(DisplayType.DateTime, getLanguage()).format(now)); - // Table Header + formatPage(sheet); + createHeaderFooter(sheet); createTableHeader(sheet); m_sheetCount++; // return sheet; } - + private void createTableHeader(HSSFSheet sheet) { short colnumMax = 0; @@ -282,6 +277,30 @@ public abstract class AbstractExcelExporter // m_workbook.setRepeatingRowsAndColumns(m_sheetCount, 0, 0, 0, 0); } + protected void createHeaderFooter(HSSFSheet sheet) + { + // Sheet Header + HSSFHeader header = sheet.getHeader(); + header.setRight(HSSFHeader.page()+ " / "+HSSFHeader.numPages()); + // Sheet Footer + HSSFFooter footer = sheet.getFooter(); + footer.setLeft(Adempiere.ADEMPIERE_R); + footer.setCenter(Env.getHeader(getCtx(), 0)); + Timestamp now = new Timestamp(System.currentTimeMillis()); + footer.setRight(DisplayType.getDateFormat(DisplayType.DateTime, getLanguage()).format(now)); + } + + protected void formatPage(HSSFSheet sheet) + { + sheet.setFitToPage(true); + // Print Setup + HSSFPrintSetup ps = sheet.getPrintSetup(); + ps.setFitWidth((short)1); + ps.setNoColor(true); + ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE); + ps.setLandscape(false); + } + /** * Export to given stream * @param out @@ -386,7 +405,7 @@ public abstract class AbstractExcelExporter { export(file, language, true); } - + /** * Export to file * @param file diff --git a/base/src/org/adempiere/print/export/PrintDataExcelExporter.java b/base/src/org/adempiere/print/export/PrintDataExcelExporter.java index 164299259e..23d6cbe87e 100644 --- a/base/src/org/adempiere/print/export/PrintDataExcelExporter.java +++ b/base/src/org/adempiere/print/export/PrintDataExcelExporter.java @@ -16,9 +16,14 @@ package org.adempiere.print.export; import java.sql.Timestamp; import java.util.Date; +import javax.print.attribute.standard.MediaSizeName; + import org.adempiere.impexp.AbstractExcelExporter; +import org.apache.poi.hssf.usermodel.HSSFPrintSetup; +import org.apache.poi.hssf.usermodel.HSSFSheet; import org.compiere.print.MPrintFormat; import org.compiere.print.MPrintFormatItem; +import org.compiere.print.MPrintPaper; import org.compiere.print.PrintData; import org.compiere.print.PrintDataElement; @@ -26,6 +31,7 @@ import org.compiere.print.PrintDataElement; * Export PrintData to Excel (XLS) file * @author Teo Sarca, SC ARHIPAC SERVICE SRL *
  • BF [ 1939010 ] Excel Export ERROR - java.sql.Date - integrated Mario Grigioni's fix + *
  • BF [ 1974309 ] Exporting a report to XLS is not setting page format */ public class PrintDataExcelExporter extends AbstractExcelExporter @@ -131,4 +137,56 @@ extends AbstractExcelExporter protected boolean isFunctionRow() { return m_printData.isFunctionRow(); } + + @Override + protected void formatPage(HSSFSheet sheet) { + super.formatPage(sheet); + MPrintPaper paper = MPrintPaper.get(this.m_printFormat.getAD_PrintPaper_ID()); + // + // Set paper size: + short paperSize = -1; + MediaSizeName mediaSizeName = paper.getMediaSize().getMediaSizeName(); + if (MediaSizeName.NA_LETTER.equals(mediaSizeName)) { + paperSize = HSSFPrintSetup.LETTER_PAPERSIZE; + } + else if (MediaSizeName.NA_LEGAL.equals(mediaSizeName)) { + paperSize = HSSFPrintSetup.LEGAL_PAPERSIZE; + } + else if (MediaSizeName.EXECUTIVE.equals(mediaSizeName)) { + paperSize = HSSFPrintSetup.EXECUTIVE_PAPERSIZE; + } + else if (MediaSizeName.ISO_A4.equals(mediaSizeName)) { + paperSize = HSSFPrintSetup.A4_PAPERSIZE; + } + else if (MediaSizeName.ISO_A5.equals(mediaSizeName)) { + paperSize = HSSFPrintSetup.A5_PAPERSIZE; + } + else if (MediaSizeName.NA_NUMBER_10_ENVELOPE.equals(mediaSizeName)) { + paperSize = HSSFPrintSetup.ENVELOPE_10_PAPERSIZE; + } +// else if (MediaSizeName..equals(mediaSizeName)) { +// paperSize = HSSFPrintSetup.ENVELOPE_DL_PAPERSIZE; +// } +// else if (MediaSizeName..equals(mediaSizeName)) { +// paperSize = HSSFPrintSetup.ENVELOPE_CS_PAPERSIZE; +// } + else if (MediaSizeName.MONARCH_ENVELOPE.equals(mediaSizeName)) { + paperSize = HSSFPrintSetup.ENVELOPE_MONARCH_PAPERSIZE; + } + if (paperSize != -1) { + sheet.getPrintSetup().setPaperSize(paperSize); + } + // + // Set Landscape/Portrait: + sheet.getPrintSetup().setLandscape(paper.isLandscape()); + // + // Set Paper Margin: + sheet.setMargin(HSSFSheet.TopMargin, ((double)paper.getMarginTop()) /72); + sheet.setMargin(HSSFSheet.RightMargin, ((double)paper.getMarginRight()) / 72); + sheet.setMargin(HSSFSheet.LeftMargin, ((double)paper.getMarginLeft()) / 72); + sheet.setMargin(HSSFSheet.BottomMargin, ((double)paper.getMarginBottom()) / 72); + // + } + + }