紧急求助各位大大们,谢了谢了!!!目标:在报表中,我需要打印指定内容到页面的底部实现:用空行填充以使指定部位打印到底部,需要填充的长度为:getPrintPaperHeight()-已打印部分各行行高getRowHeight(i)之和 - 指定内容各行行高getRowHeight(i)之和,然后除以默认行高getDefaultRowHeight()得到需要填充的空白行数问题:已打印部分行高默认时,没问题,但若加大了行高,填充了空白行后打印,打印的内容会切换到下一页,也即是说实际上打印的内容超出了一页打印的长度。注意:加大行高后调试程序时发现,插入空白行后对所有行高求和仍等于纸张可打印长度,但打印效果却打印到了第二页,奇怪!!!!初步估计是读取的加大行高的行的实际数值出错,但不知道具体原因,关键代码如下:/**
 * 将从cFixBottomFlagStartLine行到cFixBottomFlagEndLine行之间的内容固定显示在当前页最下方,
 * 若固定区域内容超过一页纸长度,则保证固定区域最后一行打印在最下方
 * 原理:计算当前打印页中固定区域上方的内容加上固定区域的内容的长度,
 * 与打印纸张可打印区域长度相比较,不足的用空行填充
 * @param cBookModelImpl:VTS对象
 * @param cLastPrintRangeStartLine:解析后固定区域的上一个打印区域的起始行数
 * @param cFixBottomFlagStartLine:解析后固定区域在解析后TVTS文件中所处的起始行数
 * @param cFixBottomFlagStartLine:解析后固定区域在解析后TVTS文件中所处的终止行数
 * @param cCols:空白行要求的列数
 * @return int:返回插入的空行行数
 */
private int insertEmptyLineAboveFixedRange(BookModelImpl cBookModelImpl, 
int cLastPrintRangeStartLine, int cFixBottomFlagStartLine, 
int cFixBottomFlagEndLine, int cCols) throws F1Exception
{
//计算纸张可打印区域的长度:打印纸高度 - 上边距 - 下边距
//打印纸高度像素单位为缇,上边距和下边距的单位为英寸,统一转换为缇计算
double tPrintRangeHeight = cBookModelImpl.getPrintPaperHeight() 
- cBookModelImpl.getPrintTopMargin() * 1440 
- cBookModelImpl.getPrintBottomMargin() * 1440;

//计算固定区域的上一个打印区域内容长度,单位为缇
int tSumHeight = 0;
for(int i = cLastPrintRangeStartLine; i < cFixBottomFlagStartLine; i++)
{
tSumHeight += cBookModelImpl.getRowHeight(i);
} //计算固定区域内容的长度
int tFixRangeHeight = 0;
for(int i = cFixBottomFlagStartLine; i < cFixBottomFlagEndLine; i++)
{
tFixRangeHeight += cBookModelImpl.getRowHeight(i);
}

//计算需需要插入空行的长度
//若本页已打印区域 + 固定区域可以打印在一页纸上,则只需要在本页插入空行,
//若本页已打印区域 + 固定区域 一页纸打不完,则需要在第一页和第二页上插入空行,保证固定内容打印在下边缘 
double tEmptyLength = 0;
if((tSumHeight % tPrintRangeHeight + tFixRangeHeight)
< tPrintRangeHeight)
{
tEmptyLength = tPrintRangeHeight - (tSumHeight % tPrintRangeHeight) 
- tFixRangeHeight;
}
else
{
tEmptyLength = tPrintRangeHeight- (tSumHeight % tPrintRangeHeight) 
- (tFixRangeHeight % tPrintRangeHeight);
} //计算需要插入的空行
double tEmptyRows = Math.floor(tEmptyLength / cBookModelImpl.getDefaultRowHeight());

int i = 0;
for(; i < tEmptyRows; i++)
{
cBookModelImpl.insertRange(cFixBottomFlagStartLine + i, 0, 
cFixBottomFlagStartLine + i, cCols, Constants.eShiftRows);
}

//由于空白空间可能不是整行,此处特殊处理最后一个空行行高
double tHeightDif = tEmptyLength - cBookModelImpl.getDefaultRowHeight() * (i - 1);
String tDifString = tHeightDif + "";
cBookModelImpl.setRowHeight(cFixBottomFlagStartLine + i - 1, 
Integer.parseInt(tDifString.substring(0, tDifString.indexOf("."))));

return i;
}