📄 layoutengine.java
字号:
/**
* Create Image Element from item
* @param item item
* @return image element
*/
private PrintElement createImageElement (MPrintFormatItem item)
{
Object obj = m_data.getNode(new Integer(item.getAD_Column_ID()));
if (obj == null)
return null;
else if (obj instanceof PrintDataElement)
;
else
{
log.log(Level.SEVERE, "Element not PrintDataElement " + obj.getClass());
return null;
}
PrintDataElement data = (PrintDataElement)obj;
if (data.isNull() && item.isSuppressNull())
return null;
String url = data.getValueDisplay (m_format.getLanguage());
if ((url == null || url.length() == 0))
{
if (item.isSuppressNull())
return null;
else // should create an empty area
return null;
}
ImageElement element = ImageElement.get (url);
return element;
} // createImageElement
/**
* Get default Color
* @return color
*/
public Color getColor()
{
if (m_printColor == null)
return Color.BLACK;
return m_printColor.getColor();
} // getColor
/**************************************************************************
* Layout Table.
* Convert PrintData into TableElement
* @param format format to use
* @param printData data to use
* @param xOffset X Axis - offset (start of table) i.e. indentation
* @return TableElement
*/
private PrintElement layoutTable (MPrintFormat format, PrintData printData,
int xOffset)
{
log.info(format.getName() + " - " + printData.getName());
MPrintTableFormat tf = format.getTableFormat();
// Initial Values
HashMap<Point,Font> rowColFont = new HashMap<Point,Font>();
MPrintFont printFont = MPrintFont.get (format.getAD_PrintFont_ID());
rowColFont.put(new Point(TableElement.ALL,TableElement.ALL), printFont.getFont());
tf.setStandard_Font(printFont.getFont());
rowColFont.put(new Point(TableElement.HEADER_ROW,TableElement.ALL), tf.getHeader_Font());
//
HashMap<Point,Color> rowColColor = new HashMap<Point,Color>();
MPrintColor printColor = MPrintColor.get (getCtx(), format.getAD_PrintColor_ID());
rowColColor.put(new Point(TableElement.ALL,TableElement.ALL), printColor.getColor());
rowColColor.put(new Point(TableElement.HEADER_ROW,TableElement.ALL), tf.getHeaderFG_Color());
//
HashMap<Point,Color> rowColBackground = new HashMap<Point,Color>();
rowColBackground.put(new Point(TableElement.HEADER_ROW,TableElement.ALL), tf.getHeaderBG_Color());
// Sizes
boolean multiLineHeader = false;
int pageNoStart = m_pageNo;
int repeatedColumns = 1;
Rectangle firstPage = new Rectangle(m_content);
firstPage.x += xOffset;
firstPage.width -= xOffset;
int yOffset = (int)m_position[AREA_CONTENT].y - m_content.y;
firstPage.y += yOffset;
firstPage.height -= yOffset;
Rectangle nextPages = new Rectangle(m_content);
nextPages.x += xOffset;
nextPages.width -= xOffset;
// Column count
int columnCount = 0;
for (int c = 0; c < format.getItemCount(); c++)
{
if (format.getItem(c).isPrinted())
columnCount++;
}
// System.out.println("Cols=" + cols);
// Header & Column Setup
ValueNamePair[] columnHeader = new ValueNamePair[columnCount];
int[] columnMaxWidth = new int[columnCount];
int[] columnMaxHeight = new int[columnCount];
boolean[] fixedWidth = new boolean [columnCount];
String[] columnJustification = new String[columnCount];
HashMap<Integer,Integer> additionalLines = new HashMap<Integer,Integer>();
int col = 0;
for (int c = 0; c < format.getItemCount(); c++)
{
MPrintFormatItem item = format.getItem(c);
if (item.isPrinted())
{
if (item.isNextLine() && item.getBelowColumn() != 0)
{
additionalLines.put(new Integer(col), new Integer(item.getBelowColumn()-1));
if (!item.isSuppressNull())
{
item.setIsSuppressNull(true); // display size will be set to 0 in TableElement
item.save();
}
}
columnHeader[col] = new ValueNamePair(item.getColumnName(),
item.getPrintName(format.getLanguage()));
columnMaxWidth[col] = item.getMaxWidth();
fixedWidth[col] = (columnMaxWidth[col] != 0 && item.isFixedWidth());
if (item.isSuppressNull())
{
if (columnMaxWidth[col] == 0)
columnMaxWidth[col] = -1; // indication suppress if Null
else
columnMaxWidth[col] *= -1;
}
columnMaxHeight[col] = item.getMaxHeight();
if (item.isHeightOneLine())
columnMaxHeight[col] = -1;
columnJustification[col] = item.getFieldAlignmentType();
if (columnJustification[col] == null || columnJustification[col].equals(MPrintFormatItem.FIELDALIGNMENTTYPE_Default))
columnJustification[col] = MPrintFormatItem.FIELDALIGNMENTTYPE_LeadingLeft; // when generated sets correct alignment
// Column Fonts
if (item.getAD_PrintFont_ID() != 0 && item.getAD_PrintFont_ID() != format.getAD_PrintFont_ID())
{
MPrintFont font = MPrintFont.get(item.getAD_PrintFont_ID());
rowColFont.put(new Point(TableElement.ALL, col), font.getFont());
}
if (item.getAD_PrintColor_ID() != 0 && item.getAD_PrintColor_ID() != format.getAD_PrintColor_ID())
{
MPrintColor color = MPrintColor.get (getCtx(), item.getAD_PrintColor_ID());
rowColColor.put(new Point(TableElement.ALL, col), color.getColor());
}
//
col++;
}
}
// The Data
int rows = printData.getRowCount();
// System.out.println("Rows=" + rows);
Object[][] data = new Object [rows][columnCount];
KeyNamePair[] pk = new KeyNamePair[rows];
String pkColumnName = null;
ArrayList<Integer> functionRows = new ArrayList<Integer>();
ArrayList<Integer> pageBreak = new ArrayList<Integer>();
// for all rows
for (int row = 0; row < rows; row++)
{
// System.out.println("row=" + row);
printData.setRowIndex(row);
if (printData.isFunctionRow())
{
functionRows.add(new Integer(row));
rowColFont.put(new Point(row, TableElement.ALL), tf.getFunct_Font());
rowColColor.put(new Point(row, TableElement.ALL), tf.getFunctFG_Color());
rowColBackground.put(new Point(row, TableElement.ALL), tf.getFunctBG_Color());
if (printData.isPageBreak())
{
pageBreak.add(new Integer(row));
log.finer("PageBreak row=" + row);
}
}
// Summary/Line Levels for Finanial Reports
else
{
int levelNo = printData.getLineLevelNo();
if (levelNo != 0)
{
if (levelNo < 0)
levelNo = -levelNo;
Font base = printFont.getFont();
if (levelNo == 1)
rowColFont.put(new Point(row, TableElement.ALL), new Font (base.getName(),
Font.ITALIC, base.getSize()-levelNo));
else if (levelNo == 2)
rowColFont.put(new Point(row, TableElement.ALL), new Font (base.getName(),
Font.PLAIN, base.getSize()-levelNo));
}
}
// for all columns
col = 0;
for (int c = 0; c < format.getItemCount(); c++)
{
MPrintFormatItem item = format.getItem(c);
Object dataElement = null;
if (item.isPrinted() && item.getAD_Column_ID() > 0) // Text Columns
{
if (item.isTypePrintFormat())
{
}
else if (item.isTypeImage())
{
if (item.isImageField())
{
Object obj = printData.getNode(new Integer(item.getAD_Column_ID()));
if (obj == null)
;
else if (obj instanceof PrintDataElement)
{
PrintDataElement pde = (PrintDataElement)obj;
data[row][col] = ImageElement.get ((String)pde.getValue());
}
}
else if (item.isImageIsAttached())
data[row][col] = ImageElement.get (item.get_ID());
else
data[row][col] = ImageElement.get (item.getImageURL());
}
else
{
Object obj = printData.getNode(new Integer(item.getAD_Column_ID()));
if (obj == null)
;
else if (obj instanceof PrintDataElement)
{
PrintDataElement pde = (PrintDataElement)obj;
if (pde.isID() || pde.isYesNo())
dataElement = pde.getValue();
else
dataElement = pde.getValueDisplay(format.getLanguage());
}
else
log.log(Level.SEVERE, "Element not PrintDataElement " + obj.getClass());
// System.out.println(" row=" + row + ",col=" + col + " - " + item.getAD_Column_ID() + " => " + dataElement);
data[row][col] = dataElement;
}
col++;
} // printed
} // for all columns
PrintDataElement pde = printData.getPKey();
if (pde != null) // for FunctionRows
{
pk[row] = (KeyNamePair)pde.getValue();
if (pkColumnName == null)
pkColumnName = pde.getColumnName();
}
// else
// System.out.println("No PK " + printData);
} // for all rows
//
TableElement table = new TableElement(columnHeader,
columnMaxWidth, columnMaxHeight, columnJustification,
fixedWidth, functionRows, multiLineHeader,
data, pk, pkColumnName,
pageNoStart, firstPage, nextPages, repeatedColumns, additionalLines,
rowColFont, rowColColor, rowColBackground,
tf, pageBreak);
table.layout(0,0,false, MPrintFormatItem.FIELDALIGNMENTTYPE_LeadingLeft);
if (m_tableElement == null)
m_tableElement = table;
return table;
} // layoutTable
/**
* Layout Parameter based on MQuery
* @return PrintElement
*/
private PrintElement layoutParameter ()
{
if (m_query == null || !m_query.isActive())
return null;
//
ParameterElement pe = new ParameterElement(m_query, m_printCtx, m_format.getTableFormat());
pe.layout(0, 0, false, null);
return pe;
} // layoutParameter
/**************************************************************************
* Get number of pages (Pageable Interface)
* @return number of pages
*/
public int getNumberOfPages()
{
return m_pages.size();
} // getNumberOfPages
/**
* Get Page Format (Pageable Interface)
* @param pageIndex page index
* @return Page Format
* @throws IndexOutOfBoundsException
*/
public PageFormat getPageFormat (int pageIndex) throws IndexOutOfBoundsException
{
if (!havePage(pageIndex))
throw new IndexOutOfBoundsException("No page index=" + pageIndex);
return getPageFormat();
} // getPageFormat
/**
* Get Printable (PageableInterface)
* @param pageIndex page index
* @return this
* @throws IndexOutOfBoundsException
*/
public Printable getPrintable (int pageIndex) throws IndexOutOfBoundsException
{
if (!havePage(pageIndex))
throw new IndexOutOfBoundsException("No page index=" + pageIndex);
return this;
} // getPrintable
/**
* Print Page (Printable Interface)
* @param graphics graphics
* @param pageFormat page format (ignored)
* @param pageIndex page index
* @return PageExists/NoSuchPage
* @throws PrinterException
*/
public int print (Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException
{
if (!havePage(pageIndex))
return Printable.NO_SUCH_PAGE;
//
Rectangle r = new Rectangle (0, 0, (int)getPaper().getWidth(true), (int)getPaper().getHeight(true));
Page page = getPage(pageIndex+1);
//
// log.fine("#" + m_id, "PageIndex=" + pageIndex + ", Copy=" + m_isCopy);
page.paint((Graphics2D)graphics, r, false, m_isCopy); // sets context
getHeaderFooter().paint((Graphics2D)graphics, r, false);
//
return Printable.PAGE_EXISTS;
} // print
/**
* Do we have the page
* @param pageIndex page index
* @return true if page exists
*/
private boolean havePage (int pageIndex)
{
if (pageIndex < 0 || pageIndex >= getNumberOfPages())
return false;
return true;
} // havePage
/**
* Print Copy
* @return true if copy
*/
public boolean isCopy()
{
return m_isCopy;
} // isCopy
/**
* Set Copy
* @param isCopy if true document is a copy
*/
public void setCopy (boolean isCopy)
{
m_isCopy = isCopy;
} // setCopy
/**************************************************************************
* Get the doc flavor (Doc Interface)
* @return SERVICE_FORMATTED.PAGEABLE
*/
public DocFlavor getDocFlavor()
{
return DocFlavor.SERVICE_FORMATTED.PAGEABLE;
} // getDocFlavor
/**
* Get Print Data (Doc Interface)
* @return this
* @throws IOException
*/
public Object getPrintData() throws IOException
{
return this;
} // getPrintData
/**
* Get Document Attributes (Doc Interface)
* @return null to obtain all attribute values from the
* job's attribute set.
*/
public DocAttributeSet getAttributes()
{
return null;
} // getAttributes
/**
* Obtains a reader for extracting character print data from this doc.
* (Doc Interface)
* @return null
* @exception IOException
*/
public Reader getReaderForText() throws IOException
{
return null;
} // getReaderForText
/**
* Obtains an input stream for extracting byte print data from this doc.
* (Doc Interface)
* @return null
* @exception IOException
*/
public InputStream getStreamForBytes() throws IOException
{
return null;
} // getStreamForBytes
} // LayoutEngine
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -