Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 贾斯佩雷波特。文本所需的行数_Java_Dynamic Reports - Fatal编程技术网

Java 贾斯佩雷波特。文本所需的行数

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

当我使用静态标注栏(columnFooter)时,我需要计算运行时适合文本所需的行数

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;
}