栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

lowagie.text 表格带复杂表头 导出word

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

lowagie.text 表格带复杂表头 导出word

lowagie.text 导出word表格带复杂表头的内容

使用lowagie.text 导出word表格带多表头的时候怎么处理呢?

        其实蛮简单的,知道rowspan和colspan是什么意思就好操作了。 同理设置表格标题的时候也是一样。

引入itext
com.lowagie
   itext
   2.0.8

代码:
import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.rtf.RtfWriter2;
import java.awt.*;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class ItextTableMulHeader {

    
    public static void main(String[] args) throws Exception {
        OutputStream out = new FileOutputStream("d://exportFile//table" + System.currentTimeMillis() + ".doc");
        document document = new document(PageSize.A4);
        RtfWriter2.getInstance(document, out);
        document.open();

        addTable(document);

        document.close();
        System.out.println("ok");
    }

    private static void addTable(document document) throws documentException {

        Color lightGray = new Color(232, 232, 232);
        com.lowagie.text.Font fontChinese = new com.lowagie.text.Font(null, 12, com.lowagie.text.Font.BOLD,
                Color.black);
        com.lowagie.text.Font titleChinese = new com.lowagie.text.Font(null, 17, com.lowagie.text.Font.BOLD,
                Color.black);

        String[] headFirst = {"1"};
        String[] headSec = {"11","22"};
        String[] headThird = {"111","222","333","444"};
        String[] headFour = {"1111","2222","3333","4444","5555","6666","7777","8888"};

        int maxSize = headFour.length;

        Table table = new Table(maxSize);
        int widths = 100 / maxSize;
        int widths1[] = setWordWith(maxSize, widths);// 设置每列宽度比例
        table.setWidths(widths1);
        table.setWidth(100);// 占页面宽度比例
        table.setAlignment(Element.ALIGN_CENTER);//居中
        table.setAlignment(Element.ALIGN_MIDDLE);//垂直居中
        table.setAutoFillEmptyCells(true);//自动填满
        table.setBorderWidth(1);//边框宽度
        table.setPadding(8);

        // 设置表格表题
        Paragraph p = new Paragraph("多表头表格", titleChinese);
        p.setSpacingAfter(8);
        p.setSpacingBefore(8);
        Cell cell = new Cell(p);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setBorder(0);
        cell.setColspan(maxSize); // 合并列,单独成一行
        table.addCell(cell);

        // 设置表头
        setTableHeader(table,maxSize/headFirst.length, headFirst, fontChinese, lightGray);
        setTableHeader(table,maxSize/headSec.length, headSec, fontChinese, lightGray);
        setTableHeader(table,maxSize/headThird.length, headThird, fontChinese, lightGray);
        setTableHeader(table,maxSize/headFour.length, headFour, fontChinese, lightGray);

        List> content = getRandom(5, maxSize);
        for (List row : content) {
            for (Integer column : row) {
                cell = new Cell(new Paragraph(column.toString(), fontChinese));
                cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                table.addCell(cell);
            }

        }

        document.add(table);
    }


    private static void setTableHeader(Table table, int colspan, String[] headAttr, Font fontChinese,  Color lightGray) throws BadElementException {
        Cell cell;
        for (String column : headAttr) {
            cell = new Cell(new Paragraph(column, fontChinese));
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setBackgroundColor(lightGray);
            cell.setColspan(colspan);
            table.addCell(cell);
        }
    }


    private static List> getRandom(int rowNum, int columnNum){
        List>  allList = new ArrayList<>(rowNum);
        List innerList;
        int num;
        for (int i = 0; i < rowNum; i++){
            innerList = new ArrayList<>(columnNum);
            for (int j = 0; j < columnNum; j++){
                num = (int) (Math.random() * 9999);
                innerList.add(num);
            }
            allList.add(innerList);
        }
        return allList;
    }

    private static int[] setWordWith(int size, int with) {
        int[] intWidth = new int[size];
        for (int i = 0; i < size; i++) {
            intWidth[i] = with;
        }
        return intWidth;
    }
}

表格标题,设置的时候,边框设置为0,单独占一行,如果不占一行会发生什么呢?

表头一行一行根据实际的进行设置。

  

结果:

 文件夹要先建好,然后打开对应的文件查看

  

总结:

  使用lowagie.text导出word表格带复杂表头的时候,主要是要了解rowspan和colpan,即合并行和合并列,再根据实际的合并进行。不清楚的时候,网上也找不到例子的时候,可以模拟例子各种属性多试试看看什么含义。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/310147.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号