0

JDBC データ ソースからJasperReportBuilderを使用してレポートを作成しています。その後、 JasperHtmlExporterBuilderオブジェクト パラメータを指定してtoHtmlメソッドを呼び出して HTML にエクスポートします。各行、列ヘッダー行、さらにはタイトルのテキストの上にある余分なスペースを取り除こうとしています。考えられることはすべて試しましたが、オンラインで検索しても無駄でした。

ほとんどの人は逆の問題を抱えているようです。テキストに合わせて行を拡大する必要があります。行をコンテンツの高さに強制したいと思います。それが不可能な場合は、行の高さを制限していただければ幸いです。

HTML エクスポーターは、画像を挿入してその高さを設定することで、行の高さを制御しているようです。

どんな助けでも大歓迎です。ありがとう!

編集:これが私のコードです。

String imageServletUrl = "images?image=";

StringWriter writer = new StringWriter();

JasperHtmlExporterBuilder htmlExporter = Exporters.htmlExporter(writer);
htmlExporter.setImagesURI(imageServletUrl);

SqlRowSet rowSet = getData(databaseIpAddr, portNumber, databaseName, databaseUser, databasePassword);

JRDataSource ds = createDataSource(rowSet);

JasperReportBuilder builder = DynamicReports.report();

IntegerType intType = DynamicReports.type.integerType();
DateType dateType = DynamicReports.type.dateType();

int rowHeightPx = 20;

TextColumnBuilder<Integer> col1 = col
   .column(COL_TITLE_RESULT_NUM, RESULTS_COL_TITLE_RESULT_NUM, intType)
   .setWidth(35)
   .setFixedHeight(rowHeightPx)
   .setStretchWithOverflow(true);   

... create other eight columns ...

StyleBuilder titleStyle = stl.style()
   .bold()
   .setFontSize(22)
   .setHorizontalAlignment(HorizontalAlignment.CENTER);

StyleBuilder columnTitleStyle = stl.style()
   .bold()
   .setAlignment(HorizontalAlignment.CENTER, VerticalAlignment.MIDDLE)
   .setBorder(stl.pen1Point());

StyleBuilder columnStyle = stl.style()
   .setAlignment(HorizontalAlignment.CENTER, VerticalAlignment.MIDDLE)
   .setLineSpacing(LineSpacing.SINGLE)
   .setBorder(stl.pen1Point());

TextFieldBuilder<String> titleBuilder = DynamicReports.cmp
   .text(selectedAgency)
   .setStyle(titleStyle)
   .setFixedHeight(20);

TextFieldBuilder<String> subtitleBuilder = DynamicReports.cmp
   .text("Start Time: " + startDate + " " + getStartTime() + ", End Time: " + endDate + " " + getEndTime())
   .setFixedHeight(20);

TextFieldBuilder<String> noDataMsgBuilder = DynamicReports.cmp
   .text(NO_DATA_MSG)
   .setStyle(columnStyle);

builder
   .title(titleBuilder)
   .addPageHeader(subtitleBuilder)
   .setColumnTitleStyle(columnTitleStyle)
   .columns(col1, col2, col3, col4, col5, col6, col7, col8, col9)
   .setColumnStyle(columnStyle)
   .highlightDetailOddRows()
   .noData(titleBuilder, subtitleBuilder, noDataMsgBuilder)
   .setWhenNoDataType(WhenNoDataType.NO_DATA_SECTION);

String reportHtml;
try {
   // this seems to be required to get to the DynamicReports images
   getContext().getRequest().getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, builder.toJasperPrint());

   builder.toHtml(htmlExporter);

   reportHtml = writer.toString();
}
catch (DRException e) 
{
   e.printStackTrace();
   reportHtml = "There was an error generating the report";
}
4

2 に答える 2

1

編集:以下のソリューションは、DynamicReports ではなくDynamicJasperライブラリでのみ正常に機能します。DR APIにも同様の操作が必要だと思います(確かではありません-DRでの私の露出は非常に限られています:()。

DynamicReportBuilder::setHeaderHeight(..)、setDetailHeight(..) および JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN パラメータ設定の組み合わせでそれを行う必要がありますか?

// build dynamicreport instance
DynamicReportBuilder dynamicReportBuilder = new DynamicReportBuilder();

dynamicReportBuilder.setHeaderHeight(50); //sets the column header height
dynamicReportBuilder.setDetailHeight(50); //sets the detail band rows height

DynamicReport dynamicReport = dynamicReportBuilder.build();

// build jasperprint..
JasperPrint jasperPrint = DynamicJasperHelper.generateJasperPrint(
    dynamicReport, new ClassicLayoutManager(), dataSource, new HashMap<String, Object>());

// export as html
JRExporter exporter = new JRHtmlExporter();

// tell jasper not to use images for aligning
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, targetFile);

exporter.exportReport();
于 2013-03-15T04:54:03.367 に答える
0

レポートのバンドの高さを各バンドの行の高さに合わせます。行間に空白がないことを確認してください。「空の行」が必要な場合は、対応するバンドの幅を持つ空のテキスト フィールドを作成します。レポートはグリッドと同じように考えてください。

于 2013-03-15T12:10:58.210 に答える