Java 贾斯佩雷波特。文本所需的行数
当我使用静态标注栏(columnFooter)时,我需要计算运行时适合文本所需的行数Java 贾斯佩雷波特。文本所需的行数,java,dynamic-reports,Java,Dynamic Reports,当我使用静态标注栏(columnFooter)时,我需要计算运行时适合文本所需的行数 int rows = numberOfRows_Calculator((String) ContentText, (java.awt.Font) font, (Integer, in pixels) columnWidth); TextFieldBuilder<String> textFieldBuilderMyStaticBand = new ComponentBuilders().text
int rows = numberOfRows_Calculator((String) ContentText, (java.awt.Font) font, (Integer, in pixels) columnWidth);
TextFieldBuilder<String> textFieldBuilderMyStaticBand = new ComponentBuilders().text(ContentText);
textFieldBuilderDisclaimer.setFixedRows(rows);
jasperReportBuilder.columnFooter(textFieldBuilderMyStaticBand);
int rows=numberOfRows\u计算器((字符串)ContentText,(java.awt.Font)Font,(整数,以像素为单位)columnWidth);
textfieldbuildertextfieldbuildermsystaticband=newcomponentbuilders().text(ContentText);
textFieldBuilderDisclaimer.setFixedRows(行);
jasperReportBuilder.columnFooter(TextFieldBuilderSystemBand);
最后,这是我的解决方案,我知道这并不完美,因为我可以发现包含大于列宽的单词的字符串存在问题
private int numberOfRows_Calculator(String text, String fontName, int fontSize, int fontStyle, int columnWidth) {
FontRenderContext context = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB).createGraphics().getFontRenderContext();
java.awt.Font font = new Font(fontName, fontStyle, fontSize);
double width;
int numberOfRows = 0;
int breakLineIndex;
boolean continuee = true;
String subtext = text;
String breaklineString = System.getProperty("line.separator");
int breaklineLength = breaklineString.length();
do {
breakLineIndex = subtext.indexOf(breaklineString);
if (breakLineIndex > -1) {
width = font.getStringBounds(subtext.substring(0, breakLineIndex), context).getWidth();
numberOfRows = numberOfRows + (int) (width / columnWidth) + 1;
subtext = subtext.substring(breakLineIndex + breaklineLength, subtext.length());
} else {
width = font.getStringBounds(subtext, context).getWidth();
numberOfRows = numberOfRows + (int) (width / columnWidth) + 1;
continuee = false;
}
} while (continuee);
return numberOfRows;
}