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

本文详细介绍了如何利用lowagie.text库在Word文档中实现表格带有多级表头的创建,包括合并行(rowspan)和列(colspan)的操作技巧,以及设置表头和自定义样式的步骤。通过实例演示,读者可以轻松掌握在Java中处理复杂表格的方法。
摘要由CSDN通过智能技术生成

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

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

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

引入itext

<groupId>com.lowagie</groupId>
   <artifactId>itext</artifactId>
   <version>2.0.8</version>
</dependency>

代码:

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 {

    /**
     * colspan 合并列
     *  rowspan 合并行
     */
    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<List<Integer>> content = getRandom(5, maxSize);
        for (List<Integer> 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<List<Integer>> getRandom(int rowNum, int columnNum){
        List<List<Integer>>  allList = new ArrayList<>(rowNum);
        List<Integer> 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,即合并行和合并列,再根据实际的合并进行。不清楚的时候,网上也找不到例子的时候,可以模拟例子各种属性多试试看看什么含义。

com.lowagie.text.document classnotfoundexception 是一个 Java 异常,其中 com.lowagie 是一个第三方库的包名,用于 PDF 文档生成。classnotfoundexception 则是 Java 中的一个标准异常,它表示无法找到指定类的错误。 通常出现 com.lowagie.text.document classnotfoundexception 的原因可能包括以下几种: 1. 未正确配置项目依赖,可能缺少 com.lowagie.text 这个库; 2. 项目中引用 com.lowagie.text 的语句书写有误; 3. com.lowagie.text 库的版本不兼容当前项目; 4. 操作系统或者 Java 环境的版本不兼容,导致找不到这个类。 解决这个异常的方法就是要确定具体的原因,针对性地进行调整。首先可以检查项目的依赖库,确认 com.lowagie.text 是否已经在项目中正确引用。如果没有引用,需要在项目的 pom.xml 或者 build.gradle 文件中增加对应的依赖配置,再进行更新依赖操作。 如果依赖配置没有问题,需要检查代码中引用 com.lowagie.text 的语段是否书写正确,如包名、类名、方法等。可以先将代码中可能影响语句调用的代码注释掉,再进行编译运行,寻找出错语句的位置。 如果以上两种方法还不能解决问题,可以考虑升级或降级 com.lowagie.text 库的版本,或者切换系统或者 Java 版本。在确定系统或者 Java 环境的版本问题之前,可以在其他的开发机器或者服务器上进行测试,确认问题是否与本地开发环境有关。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值