`
一抹暗香
  • 浏览: 930 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

使用iText在word文档中插入复杂的表格

阅读更多

本文转自网络:连接http://outofmemory.cn/code-snippet/1892/usage-iText-word-document-insert-complex-form

 

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档和word文档的一个java类库。通过iText不仅可以生成PDF或rtf 的文档,而且可以将XML、Html文件转化为PDF文件。

我们看下如何使用itext插入表格。

要插入表格首先要创建Table对象

如下代码创建了一个2列的表格,声明表格对象至少要指定表格对象有几列。

Table table =newTable(2);

或者:

Table table =newTable(2,3);

以上代码表示创建一个2列3行的表格。

itext中提供了很多属性,我们可以设置表格的边框,设置cellspacing,cellpadding,以及backgroundColor等属性。

声明表格之后就需要向表格中插入单元格了,需要注意itext中的table只有Cell的概念,没有行的概念,因为在声明表格时必须指定该表格由几列组成,所以不会有问题。

下面我们声明一个Cell对象:

Cell cell =newCell("HELLO WORLD");

很简单的创建了一个单元格对象,这个单元格中有文字HELLO WORLD.

你也可以先创建一个空的单元格,然后向单元格内插入任意的元素,例如:

Cell cell =newCell();Paragraph pHello =newParagraph("Hello");
cell.add(pHello);

如果需要还可以通过cell.setRowspan(arg0);imgCell.setColspan(arg0)方法来设置单元格的RowSpan和ColSpan属性。

创建好Cell之后需要将Cell添加到Table中:

table.addCell(cell);

iText提供的在word文档中操作table的api很简单,下面有一个比较复杂的例子供参考:

其效果图,如下:

import java.awt.Color;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Table;
import com.lowagie.text.rtf.RtfWriter2;
import com.lowagie.text.rtf.style.RtfFont;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/** 学生课表导出word author:yyli Sep 15, 2010 */
public class StudentCurriculumWordAction extends ActionSupport {

    private static final long serialVersionUID = 2150958354251222076L;

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return SUCCESS;
    }

    @SuppressWarnings( { "serial", "unchecked" })
    public InputStream getWordFile() throws Exception {
        Map<String, Object> session = ActionContext.getContext().getSession();
        List<StudentCurriculum> leftList = (List<StudentCurriculum>) session
                .get("stuCurriculumleftList");
        String[] stuCurriculumArray = (String[]) session
                .get("stuCurriculumrightArray");
        float totalXf = 0;

        /** 创建Document对象(word文档) author:yyli Sep 15, 2010 */
        Document doc = new Document(PageSize.A4);
        /** 新建字节数组输出流 author:yyli Sep 15, 2010 */
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        /** 建立一个书写器与document对象关联,通过书写器可以将文档写入到输出流中 author:yyli Sep 15, 2010 */
        RtfWriter2.getInstance(doc, baos);
        doc.open();

        /** 标题字体 author:yyli Sep 15, 2010 */
        RtfFont titleFont = new RtfFont("仿宋_GB2312", 12, Font.NORMAL,
                Color.BLACK);
        /** 正文字体 author:yyli Sep 15, 2010 */
        RtfFont contextFont = new RtfFont("仿宋_GB2312", 9, Font.NORMAL,
                Color.BLACK);

        /** 表格设置 author:yyli Sep 15, 2010 */
        Table table = new Table(12, 16);
        int[] withs = { 3, 9, 5, 4, 4, 3, 3, 14, 14, 14, 14, 14 };
        /** 设置每列所占比例 author:yyli Sep 15, 2010 */
        table.setWidths(withs);
        /** 表格所占页面宽度 author:yyli Sep 15, 2010 */
        table.setWidth(100);
        /** 居中显示 author:yyli Sep 15, 2010 */
        table.setAlignment(Element.ALIGN_CENTER);
        /** 自动填满 author:yyli Sep 15, 2010 */
        table.setAutoFillEmptyCells(true);

        /** 第一行(标题) author:yyli Sep 15, 2010 */
        String titleString = "东南大学 "
                + (String) session.get("selectXn")
                + "-"
                + String.valueOf(Integer.parseInt((String) session
                        .get("selectXn"))) + " 学年第 "
                + (String) session.get("selectXq") + "学期 学生个人课表";
        Paragraph title = new Paragraph(titleString);
        // 设置标题格式对其方式
        title.setAlignment(Element.ALIGN_CENTER);
        title.setFont(titleFont);
        doc.add(title);

        /** 第二行(正文) author:yyli Sep 15, 2010 */
        String contextString = "院系:" + (String) session.get("yxmc") + "    专业:"
                + (String) session.get("zymc") + "    学号:"
                + (String) session.get("xh") + "    一卡通号:"
                + (String) session.get("userId") + "    姓名:"
                + (String) session.get("stuName");
        Paragraph context = new Paragraph(contextString);
        // 正文格式对齐方式
        context.setAlignment(Element.ALIGN_CENTER);
        context.setFont(contextFont);
        // 与上一段落(标题)的行距
        context.setSpacingBefore(10);
        // 设置第一行空的列数(缩进)
        // context.setFirstLineIndent(20);
        doc.add(context);

        /** 第三行(表格) author:yyli Sep 15, 2010 */
        Cell[] cellHeaders = new Cell[11];
        cellHeaders[0] = new Cell(new Phrase("序号", contextFont));
        cellHeaders[1] = new Cell(new Phrase("课程名称", contextFont));
        cellHeaders[2] = new Cell(new Phrase("教师", contextFont));
        cellHeaders[3] = new Cell(new Phrase("学分", contextFont));
        cellHeaders[4] = new Cell(new Phrase("上课周次", contextFont));
        cellHeaders[5] = new Cell(new Phrase(" ", contextFont));
        cellHeaders[5].setColspan(2);
        cellHeaders[6] = new Cell(new Phrase("星期一", contextFont));
        cellHeaders[7] = new Cell(new Phrase("星期二", contextFont));
        cellHeaders[8] = new Cell(new Phrase("星期三", contextFont));
        cellHeaders[9] = new Cell(new Phrase("星期四", contextFont));
        cellHeaders[10] = new Cell(new Phrase("星期五", contextFont));
        for (int i = 0; i < 11; i++) {
            /** 居中显示 author:yyli Sep 15, 2010 */
            cellHeaders[i].setHorizontalAlignment(Element.ALIGN_CENTER);
            /** 纵向居中显示 author:yyli Sep 15, 2010 */
            cellHeaders[i].setVerticalAlignment(Element.ALIGN_MIDDLE);
            table.addCell(cellHeaders[i]);
        }
        /** 向表格填充数据 author:yyli Sep 15, 2010 */
        for (int i = 0; i < 15; i++) {
            /** 第0列 author:yyli Sep 15, 2010 */
            Cell cell0 = new Cell(
                    new Phrase(String.valueOf(i + 1), contextFont));
            cell0.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell0.setVerticalAlignment(Element.ALIGN_MIDDLE);
            table.addCell(cell0);

            /** 第1-4列 author:yyli Sep 15, 2010 */
            Cell[] cell1_4 = new Cell[4];
            if (i < leftList.size()) {
                cell1_4[0] = new Cell(new Phrase(str_changenbsp(leftList.get(i)
                        .getKcmc()), contextFont));
                cell1_4[1] = new Cell(new Phrase(str_changenbsp(leftList.get(i)
                        .getJsxm()), contextFont));
                cell1_4[2] = new Cell(new Phrase(str_changenbsp(leftList.get(i)
                        .getXf()), contextFont));
                cell1_4[3] = new Cell(new Phrase(str_changenbsp(leftList.get(i)
                        .getJszc()), contextFont));
            }
            for (int n = 0; n < cell1_4.length; n++) {
                cell1_4[n].setHorizontalAlignment(Element.ALIGN_CENTER);
                cell1_4[n].setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(cell1_4[n]);
            }
            /** 第5列 author:yyli Sep 15, 2010 */
            Cell cell5 = null;
            if (i == 0) {
                cell5 = new Cell(new Phrase("上午", contextFont));
                cell5.setRowspan(5);
            }
            if (i == 5) {
                cell5 = new Cell(new Phrase("下午", contextFont));
                cell5.setRowspan(5);
            }
            if (i == 10) {
                cell5 = new Cell(new Phrase("晚上", contextFont));
                cell5.setRowspan(2);
            }
            if (i == 12) {
                cell5 = new Cell(new Phrase("周六", contextFont));
                cell5.setColspan(2);
            }
            if (i == 13) {
                cell5 = new Cell(new Phrase("周日", contextFont));
                cell5.setColspan(2);
            }
            if (i == 14) {
                cell5 = new Cell(new Phrase("备注", contextFont));
                cell5.setColspan(2);
            }
            if (cell5 != null) {
                cell5.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell5.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(cell5);
            }
            /** 第6列 author:yyli Sep 15, 2010 */
            if (i < 12) {
                Cell cell2 = new Cell(new Phrase(String.valueOf(i + 1),
                        contextFont));
                cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell2.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(cell2);
            }
            /** 第7-11列 author:yyli Sep 15, 2010 */
            if (i == 0 || i == 5 || i == 10) {
                Cell[] cell7_11 = new Cell[5];
                for (int n = 0; n < 5; n++) {
                    cell7_11[n] = new Cell(new Phrase(
                            str_changebr(stuCurriculumArray[i + n]),
                            contextFont));
                    cell7_11[n].setHorizontalAlignment(Element.ALIGN_CENTER);
                    cell7_11[n].setVerticalAlignment(Element.ALIGN_MIDDLE);
                    if (i == 0 || i == 5) {
                        cell7_11[n].setRowspan(5);
                    } else {
                        cell7_11[n].setRowspan(2);
                    }
                    table.addCell(cell7_11[n]);
                }
            }
            Cell cell7 = null;
            if (i == 12) {
                cell7 = new Cell(new Phrase(
                        str_changebr(stuCurriculumArray[15]), contextFont));
            }
            if (i == 13) {
                cell7 = new Cell(new Phrase(
                        str_changebr(stuCurriculumArray[16]), contextFont));
            }
            if (i == 14) {
                cell7 = new Cell(new Phrase(
                        str_changebr(stuCurriculumArray[17]), contextFont));
            }
            if (cell7 != null) {
                cell7.setColspan(5);
                cell7.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell7.setVerticalAlignment(Element.ALIGN_MIDDLE);
                table.addCell(cell7);
            }

        }

        doc.add(table);
        doc.close();

        // 得到输入流  
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        baos.close();
        return bais;
    }

    public String str_changenbsp(String str) {
        if (str != null) {
            return str.replaceAll(" ", "");
        } else {
            return "";
        }
    }

    public String str_changebr(String str) {
        if (str != null) {
            return str.replaceAll("<br>", "\n");
        } else {
            return "";
        }
    }
}

 

  • 大小: 82.3 KB
分享到:
评论

相关推荐

    itext往word里插入图片和画表格

    在这个场景中,我们将探讨如何使用iText在Word文档中插入图片和绘制表格。 首先,理解一个关键概念:iText本身并不直接支持Word格式。然而,由于Word文档可以被转换为或从OpenXML格式解析,我们可以通过处理这些XML...

    Java 使用iText生成word文档,有表格,图片,文本有颜色

    在Java开发中,有时我们需要将数据导出为Word文档,以方便阅读和打印。...通过学习和理解这些代码,你可以快速掌握在Java中使用iText生成Word文档的技巧。记得根据你的项目需求进行适当的修改和优化。

    itext操作word生成目录、页码、表格、插入图片

    本篇将深入探讨如何使用iText来实现Word文档中的目录生成、页码设置、表格创建以及图片插入等功能。 首先,我们需要理解的是,由于iText主要用于PDF,所以在操作Word时,我们通常会借助于像Apache POI这样的库来...

    java itext pdf word 中文 表格 图片

    在IT行业中,生成PDF和Word文档通常用于报告、发票、合同等文档的自动化生成,尤其在需要包含中文字符、表格和图片的情况下。iText库不仅支持基本的文本格式化,还支持复杂的布局和多媒体元素。 在生成PDF时,iText...

    使用IText生成PDF和WORD文档

    IText是一款广泛使用的Java库,专门用于创建和编辑PDF及Word文档。在本文中,我们将深入探讨如何利用IText库生成这两种格式的文档,并通过实际的源码示例来理解其工作原理。 首先,让我们从PDF(Portable Document ...

    Itext处理word文档整理代码

    在这个特定的场景中,我们关注的是如何使用Itext来生成包含图片和表格的Word文档。下面我们将深入探讨这个知识点。 首先,Itext不直接支持创建Word(.doc或.docx)文件,但它可以通过Apache POI库来实现这一功能。...

    Itext导出Word文档的例子

    在这个特定的例子中,我们将讨论如何使用Itext来导出Word文档。虽然Itext的主要功能是处理PDF,但通过其扩展库,它也能支持其他格式,包括Microsoft Word的DOC和DOCX格式。 首先,我们来看一下Itext的核心库:`...

    利用IText导出word

    为了使用iText导出Word文档,你需要在项目中引入iText库。对于Java项目,可以通过Maven或Gradle添加依赖。在Maven的pom.xml文件中,添加以下依赖: ```xml &lt;groupId&gt;com.itextpdf&lt;/groupId&gt; &lt;artifactId&gt;itext...

    itext生成word文档,包含图片

    然而,根据你的需求,我们不仅要用iText生成Word文档,还要在文档中嵌入图片,这需要对iText的功能有深入的理解,并且可能需要结合其他库如Apache POI。以下是关于这个主题的详细知识: 1. **iText简介**: iText...

    IText导出Word

    在这个过程中,我们将会探讨如何利用IText实现Word文档的各种复杂格式,如层级目录、页眉、页脚、页码设置、字体样式以及包含表格和图片。 1. **层级目录**:在Word文档中,层级目录可以帮助读者快速定位内容。...

    java生成word,包括word表格,表格插入图片,jar包都在了

    Java生成Word文档是一种常见的需求,特别是在企业级应用中,例如报告生成、数据导出等。在Java中,我们可以使用各种库来实现这个...对于那些需要在Java应用中生成复杂Word文档的开发者来说,这是一个非常实用的资源。

    itext 对word的操作

    使用iText操作Word文档,通常需要以下步骤: 1. **读取DOC文件**:通过将RTF转换为PDF的过程,iText可以读取DOC文件的内容,这包括文本、段落格式、页眉和页脚等。 2. **解析内容**:解析DOC文件后,iText会将内容...

    itext jar包组合-导出word文档案例,解决中文乱码问题

    在Java中,我们通常会使用Apache POI库来处理Word文档,但iText提供了一种不同的途径,特别是对于那些已经熟悉其API的开发者来说。 在标题提到的“itext jar包组合”中,我们需要确保引入了所有必要的依赖。这通常...

    使用itext方式导出word格式

    iText的版本2.1.7是这次案例中使用的版本,它包含了处理文本、表格、图像和样式的基本功能。 在提供的链接中,博主分享了一个关于如何使用iText导出Word文档的实际案例。尽管没有具体的代码示例,我们可以根据iText...

    Itext实现自动生成pdf word文件

    集成iText到项目中,开发者可以构建复杂的PDF生成逻辑,比如发票、报告、证书等自动化文档生成系统。通过配合其他库(如`xwork-core-2.3.16.3.jar`),可以在Web应用中实现动态PDF的生成,如在Struts框架下。 总之...

    itext 导出word 下载这个示例

    2. **创建Word文档**:使用iText,我们可以通过`Document`类创建一个新的Word文档。 ```java import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Paragraph; Document document = new ...

    利用poi+itextpdf进行word转pdf.rar

    在IT行业中,转换文档格式是一项常见的任务,例如将Word文档转换为PDF。在这个场景中,我们看到一个关于如何使用Java编程语言实现此功能的资源包:“利用poi+itextpdf进行word转pdf.rar”。这个压缩包包含源码、依赖...

    Itext生成带表格,图片的word文档代码,里面包含需要的jar包

    本篇文章将深入探讨如何使用Itext库生成带有表格和图片的Word文档,并提供一个基于描述中的"Demo"文件的示例代码。 首先,我们需要了解Itext库的基本用法。Itext主要通过`Document`对象来构建文档结构,通过`...

    Itext中文使用说明+英文官方API文档

    它在IT行业中广泛应用,尤其在需要生成报表、发票、证书等静态或动态文档时。Itext支持PDF版本从1.3到2.0,并且提供了一系列的API,使得开发者能够方便地进行PDF文档的操作。 **API文档的重要性** Itext的英文官方...

    itext导出word和pdf

    虽然iText的主要功能是处理PDF,但也可以通过将PDF转换为DOCX格式间接实现Word文档的创建。这通常涉及到先使用iText生成PDF,然后再用第三方工具(如Apache POI)将PDF转换为Word。然而,这种方法可能无法完全保留...

Global site tag (gtag.js) - Google Analytics