📄 pdfcell.java
字号:
if (!header) {
if (aboveBottom) {
lines = new ArrayList();
contentHeight = 0f;
} else {
size = result.size();
for (int i = 0; i < size; i++) {
line = removeLine(0);
difference += line.height();
}
}
}
if (difference > 0) {
Image image;
for (Iterator i = images.iterator(); i.hasNext();) {
image = (Image) i.next();
image.setAbsolutePosition(image.getAbsoluteX(), image.getAbsoluteY() - difference - leading);
}
}
return result;
}
/**
* Gets the images of a cell that can be drawn between certain limits.
* <P>
* Remark: all the lines that can be drawn are removed from the object!
*
* @param top the top of the part of the table that can be drawn
* @param bottom the bottom of the part of the table that can be drawn
* @return an <CODE>ArrayList</CODE> of <CODE>Image</CODE>s
*/
public ArrayList getImages(float top, float bottom) {
// if the bottom of the page is higher than the top of the cell: do nothing
if (getTop() < bottom) {
return new ArrayList();
}
top = Math.min(getTop(), top);
// initialisations
Image image;
float height;
ArrayList result = new ArrayList();
// we loop over the images
for (Iterator i = images.iterator(); i.hasNext() && !header;) {
image = (Image) i.next();
height = image.getAbsoluteY();
// if the currentPosition is higher than the bottom, we add the line to the result
if (top - height > (bottom + cellpadding)) {
image.setAbsolutePosition(image.getAbsoluteX(), top - height);
result.add(image);
i.remove();
}
}
return result;
}
/**
* Checks if this cell belongs to the header of a <CODE>PdfTable</CODE>.
*
* @return <CODE>void</CODE>
*/
boolean isHeader() {
return header;
}
/**
* Indicates that this cell belongs to the header of a <CODE>PdfTable</CODE>.
*/
void setHeader() {
header = true;
}
/**
* Checks if the cell may be removed.
* <P>
* Headers may allways be removed, even if they are drawn only partially:
* they will be repeated on each following page anyway!
*
* @return <CODE>true</CODE> if all the lines are allready drawn; <CODE>false</CODE> otherwise.
*/
boolean mayBeRemoved() {
return (header || (lines.isEmpty() && images.isEmpty()));
}
/**
* Returns the number of lines in the cell.
*
* @return a value
*/
public int size() {
return lines.size();
}
/**
* Returns the number of lines in the cell that are not empty.
*
* @return a value
*/
public int remainingLines() {
if (lines.isEmpty()) return 0;
int result = 0;
int size = lines.size();
PdfLine line;
for (int i = 0; i < size; i++) {
line = (PdfLine) lines.get(i);
if (line.size() > 0) result++;
}
return result;
}
/**
* Returns the height needed to draw the remaining text.
*
* @return a height
*/
public float remainingHeight() {
float result = 0f;
for (Iterator i = images.iterator(); i.hasNext();) {
Image image = (Image) i.next();
result += image.getScaledHeight();
}
return remainingLines() * leading + 2 * cellpadding + cellspacing + result + leading / 2.5f;
}
// methods to retrieve membervariables
/**
* Gets the leading of a cell.
*
* @return the leading of the lines is the cell.
*/
public float leading() {
return leading;
}
/**
* Gets the number of the row this cell is in..
*
* @return a number
*/
public int rownumber() {
return rownumber;
}
/**
* Gets the rowspan of a cell.
*
* @return the rowspan of the cell
*/
public int rowspan() {
return rowspan;
}
/**
* Gets the cellspacing of a cell.
*
* @return a value
*/
public float cellspacing() {
return cellspacing;
}
/**
* Gets the cellpadding of a cell..
*
* @return a value
*/
public float cellpadding() {
return cellpadding;
}
/**
* Processes all actions contained in the cell.
* @param element an element in the cell
* @param action an action that should be coupled to the cell
* @param allActions
*/
protected void processActions(Element element, PdfAction action, ArrayList allActions) {
if (element.type() == Element.ANCHOR) {
String url = ((Anchor) element).getReference();
if (url != null) {
action = new PdfAction(url);
}
}
Iterator i;
switch (element.type()) {
case Element.PHRASE:
case Element.SECTION:
case Element.ANCHOR:
case Element.CHAPTER:
case Element.LISTITEM:
case Element.PARAGRAPH:
for (i = ((ArrayList) element).iterator(); i.hasNext();) {
processActions((Element) i.next(), action, allActions);
}
break;
case Element.CHUNK:
allActions.add(action);
break;
case Element.LIST:
for (i = ((List) element).getItems().iterator(); i.hasNext();) {
processActions((Element) i.next(), action, allActions);
}
break;
default:
int n = element.getChunks().size();
while (n-- > 0)
allActions.add(action);
break;
}
}
/**
* This is the number of the group the cell is in.
*/
private int groupNumber;
/**
* Gets the number of the group this cell is in..
*
* @return a number
*/
public int getGroupNumber() {
return groupNumber;
}
/**
* Sets the group number.
* @param number
*/
void setGroupNumber(int number) {
groupNumber = number;
}
/**
* Gets a Rectangle that is altered to fit on the page.
*
* @param top the top position
* @param bottom the bottom position
* @return a <CODE>Rectangle</CODE>
*/
public Rectangle rectangle(float top, float bottom) {
Rectangle tmp = new Rectangle(getLeft(), getBottom(), getRight(), getTop());
tmp.cloneNonPositionParameters(this);
if (getTop() > top) {
tmp.setTop(top);
tmp.setBorder(border - (border & TOP));
}
if (getBottom() < bottom) {
tmp.setBottom(bottom);
tmp.setBorder(border - (border & BOTTOM));
}
return tmp;
}
/**
* Sets the value of {@link #useAscender}.
* @param use use ascender height if true
*/
public void setUseAscender(boolean use) {
useAscender = use;
}
/**
* Gets the value of {@link #useAscender}
* @return useAscender
*/
public boolean isUseAscender() {
return useAscender;
}
/**
* Sets the value of {@link #useDescender}.
* @param use use descender height if true
*/
public void setUseDescender(boolean use) {
useDescender = use;
}
/**
* gets the value of {@link #useDescender }
* @return useDescender
*/
public boolean isUseDescender() {
return useDescender;
}
/**
* Sets the value of {@link #useBorderPadding}.
* @param use adjust layour for borders if true
*/
public void setUseBorderPadding(boolean use) {
useBorderPadding = use;
}
/**
* Gets the value of {@link #useBorderPadding}.
* @return useBorderPadding
*/
public boolean isUseBorderPadding() {
return useBorderPadding;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -