真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java中怎么生成表格圖表

本篇文章給大家分享的是有關(guān)java中怎么生成表格圖表,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

十余年的三都網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整三都建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“三都網(wǎng)站設(shè)計(jì)”,“三都網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

java中怎么生成表格圖表

項(xiàng)目有個(gè)需求是生成上圖的表格圖表,本來excel很容易生成上邊的表格圖,但是java poi不支持在服務(wù)器端把excel表格導(dǎo)出成圖片,在沒有找到合適的工具庫(kù)下,用java 2d實(shí)現(xiàn)同樣圖表。
這個(gè)表格圖分成標(biāo)題、表頭、表中、表尾4個(gè)部分,
背景填充用:graphics.fillRect()
畫線條用:graphics.drawLine()
畫文字用:graphics.drawString()
主要用上邊三個(gè)java 2d方法實(shí)現(xiàn),剩下的就是各種坐標(biāo)位置的計(jì)算。
實(shí)現(xiàn)代碼:

package com.penngo.test;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Arrays;
import java.util.List;

public class ExcelChart {
    private Font titleFont = new Font("宋體",Font.BOLD,20);
    private Font headFont = new Font("宋體",Font.BOLD,16);
    private Font rowFont = new Font("宋體",Font.PLAIN,14);
    private Font bottomFont = new Font("宋體",Font.PLAIN,14);

    private Color titleBackgroup = new Color(237, 125, 49);  // 標(biāo)題背景色
    private Color headBackgroup = new Color(252, 228, 214);  // 表頭背景色
    private Color lineColor = new Color(237, 125,49);        // 線條顏色

    private int titleMargin = 8;
    private int headMargin = 8;
    private int rowMargin = 5;
    private int bottomMargin = 5;

    private int width;
    private int height;
    private int widthMargin = 10;   // x橫軸邊距
    private int heightMargin = 10;  // y軸邊框

    /**
     * 將圖片保存到指定位置
     * @param image 緩沖文件類
     * @param fileLocation 文件位置
     */
    public void createImage(BufferedImage image, File fileLocation) {
        try {
            ImageIO.write(image, "png", fileLocation);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 字符串總寬度
     * @param g
     * @param str
     * @return
     */
    private int  getStringWidth(Graphics g,String str) {
        char[]  strcha=str.toCharArray();
        int strWidth = g.getFontMetrics().charsWidth(strcha, 0, str.length());
        return strWidth;
    }
    //字符高度
    private int  getStringHeight(Graphics g) {
        int height = g.getFontMetrics().getHeight();
        return height;
    }
    private int calculateImageHeight(int rowCount){
        BufferedImage image = new BufferedImage(100, 100,BufferedImage.TYPE_INT_RGB);
        Graphics graphics = image.getGraphics();
        graphics.setFont(titleFont);
        int titleRowHeight = getStringHeight(graphics) + titleMargin * 2;
        graphics.setFont(headFont);
        int headRowHeight = getStringHeight(graphics) + headMargin * 2;
        graphics.setFont(rowFont);
        int rowHeight = getStringHeight(graphics) + rowMargin * 2;
        graphics.setFont(bottomFont);
        int bottomRowHeight = getStringHeight(graphics) + bottomMargin * 2;
        int height = widthMargin * 2 + titleRowHeight + headRowHeight + rowHeight * rowCount + bottomRowHeight;
        return height;
    }
    public void createTableChart(File img, String title, String bottomTitle, List headList, List> rows, int width){

        widthMargin = 10;
        heightMargin = 10;
        this.width = width;
        this.height = calculateImageHeight(rows.size());

        BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
        Graphics graphics = image.getGraphics();
        ((Graphics2D)graphics).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        ((Graphics2D)graphics).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0,0, width, height);


        int rowWidth = (width - widthMargin * 2) / headList.size();

        // 線條顏色
        Color lineColor = new Color(237, 125,49);

        // 創(chuàng)建標(biāo)題背景
        int xTitle = widthMargin;
        int yTitle = heightMargin;
        graphics.setFont(getTitleFont());
        int titleHeight = getStringHeight(graphics);
        writeTitle(xTitle, yTitle, titleHeight, title, graphics);

        // 創(chuàng)建表頭
        int xHead = widthMargin;
        int yHead = yTitle + titleHeight + titleMargin * 2;
        graphics.setFont(getHeadFont());
        int headHeight = getStringHeight(graphics);
        writeHead(xHead, yHead,rowWidth, headHeight, headList,graphics);

        // 表格內(nèi)容
        int xRow = widthMargin;
        int yRow = yHead + headHeight + headMargin * 2;
        graphics.setFont(rowFont);
        int rowHeight = getStringHeight(graphics);
        writeRow(xRow, yRow, rowWidth,rowHeight,headList, rows, graphics);

        // 表格底部
        int xBottom = widthMargin;
        int yBottom = yRow + (rowHeight + rowMargin * 2) * rows.size();
        graphics.setFont(bottomFont);
        int bottomHeight = getStringHeight(graphics);
        writeBottom(xBottom, yBottom, bottomHeight, bottomTitle, graphics);

        // 保存圖片
        createImage(image, img);
    }

    private void writeTitle(int xTitle, int yTitle, int titleHeight, String title, Graphics graphics){
        int titleWidth = getStringWidth(graphics, title);
        graphics.setColor(getTitleBackgroup());
        graphics.fillRect(xTitle,yTitle, width - widthMargin * 2 + 1, titleHeight + titleMargin * 2);

        // 標(biāo)題文字
        graphics.setColor(Color.WHITE);
        graphics.drawString(title, widthMargin + (width - widthMargin * 2)/2 - titleWidth / 2, heightMargin + titleHeight + titleMargin - 3);

    }
    private void drawString(Graphics graphics, String txt, int x, int y){
        Graphics2D g2d = (Graphics2D)graphics;
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);//設(shè)置抗鋸齒
        g2d.setPaint(new Color(0, 0, 0, 64));//陰影顏色
        g2d.drawString(txt, x, y);//先繪制陰影
        g2d.setPaint(Color.BLACK);//正文顏色
        g2d.drawString(txt, x, y);//用正文顏色覆蓋上去
    }
    /**
     * 寫入表頭文本
     */
    private void writeHead(int xHead, int yHead,int rowWidth, int headHeight, List headList,Graphics graphics){
        // 背景填充
        graphics.setColor(getHeadBackgroup());
        graphics.fillRect(xHead, yHead, width - widthMargin * 2,  headHeight + headMargin * 2);
        // 表格豎線
        graphics.setColor(getLineColor());
        for(int i = 0;i < headList.size() + 1; i++){
            graphics.drawLine(xHead + i * rowWidth, yHead, xHead + i * rowWidth, yHead + headHeight + headMargin * 2);
        }

        graphics.setColor(Color.BLACK);
        for(int i = 0; i < headList.size(); i++){
            String str = headList.get(i);
            if(str.length() < 5){
                graphics.drawString(str, xHead + i * rowWidth + headMargin, yHead + headHeight + headMargin);
            }
            else{
                String t1 = str.substring(0, 5);
                int t1Width = getStringWidth(graphics, t1);
                graphics.drawString(t1, xHead + i * rowWidth + headMargin, yHead + headHeight - headMargin/2 + 1);
                String t2 = str.substring(5, str.length());
                int t2Width = getStringWidth(graphics, t2);
                int tdx = (t1Width - t2Width) / 2;
                graphics.drawString(t2, xHead + i * rowWidth + headMargin + tdx, yHead + headHeight + headMargin + 3);
            }
        }
    }

    /**
     * 寫入表數(shù)據(jù)
     */
    private void writeRow(int xRow, int yRow, int rowWidth,int rowHeight,List headList, List> rows,Graphics graphics){
        // 畫橫線
        int rowCount = rows.size() + 1;
        graphics.setColor(getLineColor());
        for(int i = 0; i< rowCount; i++){
            int y = yRow + i * (rowHeight + rowMargin * 2);
            graphics.drawLine(xRow, y, width - widthMargin, y);
        }
        // 畫豎線
        int colCount = headList.size() + 1;
        for(int c = 0; c < colCount; c++){
            int x = xRow + c * rowWidth;
            int maxY = yRow + rows.size() * (rowHeight + rowMargin * 2);
            graphics.drawLine(x, yRow, x, maxY);
        }
        // 寫入行數(shù)據(jù)
        graphics.setColor(Color.BLACK);
        for(int r = 0; r < rows.size(); r++){
            List row = rows.get(r);
            for(int c = 0; c < row.size(); c++){
                int x = xRow + rowMargin + c * rowWidth;
                int y = yRow + rowHeight + rowMargin+  r * (rowHeight + rowMargin * 2) - 2;
//                graphics.drawString(row.get(c), x, y);
                drawString(graphics, row.get(c), x, y);
            }
        }
    }

    private void writeBottom(int xBottom, int yBottom, int bottomHeight, String bottomTitle, Graphics graphics){
        // 畫橫線
        graphics.setColor(getLineColor());
        graphics.drawLine(xBottom, yBottom + bottomHeight + bottomMargin * 2, width - widthMargin ,yBottom + bottomHeight + bottomMargin * 2);
        // 畫豎線
        graphics.drawLine(xBottom, yBottom, xBottom ,yBottom + bottomHeight + bottomMargin * 2);
        graphics.drawLine(width - widthMargin, yBottom, width - widthMargin ,yBottom + bottomHeight + bottomMargin * 2);

        graphics.setColor(Color.BLACK);
        int bottomTitleWidth = getStringWidth(graphics, bottomTitle);
        int x = width / 2 - bottomTitleWidth / 2;
        graphics.drawString(bottomTitle, x, yBottom + bottomHeight + bottomMargin);
    }

    public Font getTitleFont() {
        return titleFont;
    }

    public void setTitleFont(Font titleFont) {
        this.titleFont = titleFont;
    }

    public Font getHeadFont() {
        return headFont;
    }

    public void setHeadFont(Font headFont) {
        this.headFont = headFont;
    }

    public Font getRowFont() {
        return rowFont;
    }

    public void setRowFont(Font rowFont) {
        this.rowFont = rowFont;
    }

    public Font getBottomFont() {
        return bottomFont;
    }

    public void setBottomFont(Font bottomFont) {
        this.bottomFont = bottomFont;
    }

    public int getTitleMargin() {
        return titleMargin;
    }

    public void setTitleMargin(int titleMargin) {
        this.titleMargin = titleMargin;
    }

    public int getHeadMargin() {
        return headMargin;
    }

    public void setHeadMargin(int headMargin) {
        this.headMargin = headMargin;
    }

    public int getRowMargin() {
        return rowMargin;
    }

    public void setRowMargin(int rowMargin) {
        this.rowMargin = rowMargin;
    }

    public int getBottomMargin() {
        return bottomMargin;
    }

    public void setBottomMargin(int bottomMargin) {
        this.bottomMargin = bottomMargin;
    }

    public Color getLineColor() {
        return lineColor;
    }

    public void setLineColor(Color lineColor) {
        this.lineColor = lineColor;
    }

    public Color getTitleBackgroup() {
        return titleBackgroup;
    }

    public void setTitleBackgroup(Color titleBackgroup) {
        this.titleBackgroup = titleBackgroup;
    }

    public Color getHeadBackgroup() {
        return headBackgroup;
    }

    public void setHeadBackgroup(Color headBackgroup) {
        this.headBackgroup = headBackgroup;
    }

    public static void main(String[] args) throws Exception{

        ExcelChart tableChart = new ExcelChart();
        try {
            List titleList = Arrays.asList("名稱","增幅","收入","收入凈利潤(rùn)","今年收入增幅比例");
            List> rows = Arrays.asList(
                    Arrays.asList("項(xiàng)目收入1", "6.05%", "9.95億", "1.83億", "5.74‰"),
                    Arrays.asList("項(xiàng)目收入2", "6.05%", "9.95億", "1.83億", "5.74‰"),
                    Arrays.asList("項(xiàng)目收入3", "6.05%", "9.95億", "1.83億", "5.74‰"),
                    Arrays.asList("項(xiàng)目收入4", "6.05%", "9.95億", "1.83億", "5.74‰"),
                    Arrays.asList("項(xiàng)目收入5", "6.05%", "9.95億", "1.83億", "5.74‰"),
                    Arrays.asList("項(xiàng)目收入6", "6.05%", "9.95億", "1.83億", "5.74‰"),
                    Arrays.asList("項(xiàng)目收入7", "6.05%", "9.95億", "1.83億", "5.74‰"),
                    Arrays.asList("項(xiàng)目收入8", "6.05%", "9.95億", "1.83億", "5.74‰"),
                    Arrays.asList("項(xiàng)目收入9", "6.05%", "9.95億", "1.83億", "5.74‰"),
                    Arrays.asList("項(xiàng)目收入10", "6.05%", "9.95億", "1.83億", "5.74‰")
            );
            tableChart.setTitleBackgroup(new Color(237, 125, 49));
            tableChart.setHeadBackgroup(new Color(252, 228, 214));
            tableChart.setLineColor(new Color(237, 125, 49));
            tableChart.createTableChart(new File("logs/tablechart1.png"),
                    "我是標(biāo)題一二三四五六七八九十","日期:9月10日 制圖:https://my.oschina.net/penngo",
                    titleList,rows,600);


        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上就是java中怎么生成表格圖表,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


名稱欄目:java中怎么生成表格圖表
轉(zhuǎn)載來于:http://weahome.cn/article/igodps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部