首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

iReport 柱狀圖 X 軸標簽完整顯示與水平滾動實現方案

     編輯:程式設計疑難解答

核心問題

  • X 軸標簽過長/過多 → 重疊、截斷、傾斜難讀。
  • 柱子過多 → 需水平滾動查看全圖。

方案一:JasperReports 內置屬性調整(無代碼)

1. 標簽旋轉與字體

  • 圖表屬性 → **Plot** → **Category Axis** → **Tick Label Rotation** 設置 0.785 (45°) 或 1.57 (90°)。
  • 設置 **Tick Label Font** 縮小字號 (如 8pt)。

2. 強制顯示所有標簽

  • Category Axis → **Vertical Tick Labels** = false(水平)。
  • **Category Margin** / **Item Margin** 調大間距。
  • 關鍵屬性:net.sf.jasperreports.chart.category.axis.tick.label.margin 設置較大值。

3. 標簽自動換行(JR 6.0+)

<categoryAxisFormat>
    <axisFormat tickLabelRotation="0.785" 
                tickLabelMask=" " 
                verticalTickLabels="false"
                labelFontName="SansSerif" labelFontSize="8"/>
</categoryAxisFormat>

在 JRXML 中直接設置 tickLabelRotation 和字體縮小通常能解決 80% 情況。

方案二:自定義 ChartCustomizer 代碼控制(完全靈活)

public class BarChartCustomizer implements JRChartCustomizer {
    @Override
    public void customize(JFreeChart chart, JRChart jrChart) {
        CategoryPlot plot = chart.getCategoryPlot();
        CategoryAxis domainAxis = plot.getDomainAxis();
        
        // 1. 標簽 45° 傾斜
        domainAxis.setCategoryLabelPositions(
            CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 4)
        );
        // 或垂直:CategoryLabelPositions.UP_90
        
        // 2. 字體縮小
        domainAxis.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 8));
        
        // 3. 關鍵:設置最大標簽行數(實現換行)
        domainAxis.setMaximumCategoryLabelLines(3); // 最多 3 行
        domainAxis.setCategoryLabelWidthRatio(0.5f); // 寬度比例
        
        // 4. 避免重疊:標準間距
        domainAxis.setLowerMargin(0.02);
        domainAxis.setUpperMargin(0.02);
        domainAxis.setCategoryMargin(0.1);
    }
}

報表屬性 → **Customizer Class** 填寫全類名。

方案三:實現水平滾動(Web 查看器)

iReport 本身不支持滾動,**需在前端容器實現**:

  • 導出為 **HTML** 或 **SVG** 格式。
  • 前端包裹:
<div style="width: 100%; overflow-x: auto; white-space: nowrap;">
    <!-- 這裡嵌入導出的圖表圖片或 SVG -->
    <img src="report.html" /> 
</div>
  • 或使用 **JasperReports Server / JS視圖庫 (Highcharts/ECharts)** 重繪,原生支持縮放平移。

方案四:數據層面優化(治本)

策略說明
數據分組/分頁每圖顯示 15-20 個類別,生成多張圖或分頁報表
Top N + 其他只顯示前 10 大類,其餘合併為「其他」
縮寫/編碼標簽用簡稱,提示框顯示全名
改用橫向條形圖Y 軸放標簽,天然寬度充足,無需旋轉

總結建議

  1. 優先嘗試 **JRXML 設置旋轉 45° + 縮小字體 + setMaximumCategoryLabelLines(2-3)**。
  2. 若類別超過 20 個,**強烈建議改橫向條形圖** 或 **分頁/分組**。
  3. Web 端需滾動 → 導出 SVG/HTML + CSS overflow-x: auto 容器。
  4. 長期項目考慮遷移至 **ECharts / Highcharts** 等現代圖表庫,交互體驗遠優於靜態 JasperReports 圖片。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved