0

静的バンド (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);
4

1 に答える 1

0

最後に、これが私の解決策です。列幅よりも大きな単語を含む文字列の問題を見つけることができるため、それは完全ではありません...

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;
}
于 2012-08-02T14:51:30.020 に答える