`

Itext表格操作详解

阅读更多

本文转自:http://hi.baidu.com/lion98/blog/item/aca07bec343720d12e2e211a.html

一个最基本的PdfPTable的例子

 

package com.itext.test;

 

import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;

 

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

 

/**
 * 一个非常简单的PdfPTable的例子.
 */
public class MyFirstTable {

 

 /**
  A very simple PdfPTable example.
 

  @param args
 
            no arguments needed
  */
 public static void main(String[] args) {

 

  System.out.println("My First PdfPTable");

 

  // 步骤 1: 创建一个document对象
  Document document = new Document();

 

  try {
   // 步骤 2:
   // 我们为document创建一个监听,并把PDF流写到文件中
   PdfWriter.getInstance(document, new FileOutputStream("c:\\MyFirstTable.pdf"));

 

   // 步骤 3:打开文档
   document.open();
   //创建一个有3列的表格
   PdfPTable table = new PdfPTable(3);
   //定义一个表格单元
   PdfPCell cell = new PdfPCell(new Paragraph("header with colspan 3"));
   //定义一个表格单元的跨度
   cell.setColspan(3);
   //把单元加到表格中
   table.addCell(cell);
   //把下面这9项顺次的加入到表格中,当一行充满时候自动折行到下一行
   table.addCell("1.1");
   table.addCell("2.1");
   table.addCell("3.1");
   table.addCell("1.2");
   table.addCell("2.2");
   table.addCell("3.2");
   table.addCell("1.3");
   table.addCell("2.3");
   table.addCell("3.3");
   //重新定义单元格
   cell = new PdfPCell(new Paragraph("cell test1"));
   //定义单元格的框颜色
   cell.setBorderColor(new Color(255, 0, 0));
   //把单元格加到表格上,默认为一个单元
   table.addCell(cell);
   //重新定义单元格
   cell = new PdfPCell(new Paragraph("cell test2"));
   //定义单元格的跨度
   cell.setColspan(2);
   //定义单元格的背景颜色
   cell.setBackgroundColor(new Color(0xC0, 0xC0, 0xC0));
   //增加到表格上
   table.addCell(cell);
   //增加到文档中
   document.add(table);
  } catch (DocumentException de) {
   System.err.println(de.getMessage());
  } catch (IOException ioe) {
   System.err.println(ioe.getMessage());
  }

 

  // 步骤 5:关闭文档
  document.close();
 }
}

 

看完这个例子,又看过我第一天记录的朋友一定会问为什么不用Table,我在这里解释一下。

 

PdfPTable is a very powerful and flexible object, but for some specific needs, you can also use one of the alternatives for PdfPTable. If you have a Swing application with JTables, you can look at the JTable2Pdf section. PdfPTable only works for generating PDF. If you need to generate HTML or RTF, you need the (no longer supported) Table object.

 

上面这句话来之---iText的 tutorial,你应该明白了吧。

 

 

 

If you add a PdfPTable with Document.add(), the default width of the table is 80 percent of the available space and the table is aligned in the center. You can change these defaults with setWidthPercentage and setHorizontalAlignment.

 

 

 

下面就讲一个可以自己定义表格宽度和对齐方式的例子:

 

package com.itext.test;

 

import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;

 

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

 

/**
 * 改变复杂表格的宽度和对齐方式.
 */
public class TableWidthAlignment {

 

 /**
  Changing the width and alignment of the complete table.
 

  param args
 
            no arguments needed
 
throws IOException
 
            no arguments needed
 
throws IOException
 
@throws DocumentException
  */
 public static void main(String[] args) throws DocumentException,
   IOException {
  // 定义中文字体
  BaseFont bfChinese = BaseFont.createFont("STSong-Light",
    "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  com.lowagie.text.Font fontCN = new com.lowagie.text.Font(bfChinese, 12,
    com.lowagie.text.Font.NORMAL);
  System.out.println("table width and alignment");
  // 步骤1:创建一个大小为A4的文档
  Document document = new Document(PageSize.A4);
  try {
   // 步骤 2:
   // 我们为document创建一个监听,并把PDF流写到文件中
   PdfWriter.getInstance(document, new FileOutputStream(
     "c:\\TableWidthAlignment.pdf"));
   // 步骤 3:打开文档
   document.open();
   // 创建一个有3列的表格
   PdfPTable table = new PdfPTable(3);
   // 定义一个表格单元
   PdfPCell cell = new PdfPCell(new Paragraph("header with colspan 3"));
   // 定义一个表格单元的跨度
   cell.setColspan(3);
   // 把单元加到表格中
   table.addCell(cell);
   // 把下面这9项顺次的加入到表格中,当一行充满时候自动折行到下一行
   table.addCell("1.1");
   table.addCell("2.1");
   table.addCell("3.1");
   table.addCell("1.2");
   table.addCell("2.2");
   table.addCell("3.2");
   table.addCell("1.3");
   table.addCell("2.3");
   table.addCell("3.3");
   // 重新定义单元格
   cell = new PdfPCell(new Paragraph("cell test1"));
   // 定义单元格的框颜色
   cell.setBorderColor(new Color(255, 0, 0));
   // 把单元格加到表格上,默认为一个单元
   table.addCell(cell);
   // 重新定义单元格
   cell = new PdfPCell(new Paragraph("cell test2"));
   // 定义单元格的跨度
   cell.setColspan(2);
   // 定义单元格的背景颜色
   cell.setBackgroundColor(new Color(0xC0, 0xC0, 0xC0));
   // 增加到表格上
   table.addCell(cell);
   document.add(new Paragraph("默认情况下的大小---居中 80%", fontCN));
   // 增加到文档中
   document.add(table);
   document.add(new Paragraph("居中 100%", fontCN));
   // 设置表格大小为可用空白区域的100%
   table.setWidthPercentage(100);
   // 增加到文档中2
   document.add(table);
   document.add(new Paragraph("居右 50%", fontCN));
   // 设置表格大小为可用空白区域的50%
   table.setWidthPercentage(50);
   // 设置水平对齐方式为 居右
   table.setHorizontalAlignment(Element.ALIGN_RIGHT);
   document.add(new Paragraph("居左 50%", fontCN));
   // 增加到文档中3
   document.add(table);
   // 设置水平对齐方式为 居左
   table.setHorizontalAlignment(Element.ALIGN_LEFT);
   document.add(table);
  } catch (Exception de) {
   de.printStackTrace();
  }
  // 步骤 5:关闭文档
  document.close();
 }
}

 


在上面的例子里,我们自己定义了一个3列的表格,而且对它进行了宽度设置和对齐方式的设置,但是细心的朋友会看到,所有的单元宽度都是相同的,因为iText为我们做了一些计算,在默认情况下,各单元格之间就是相同大小的,下面我们就讲一下,如何定义自己的单元格宽度。

 

想要做到这一点,我们需要PdfPTable(float[] relativeWidths)构造函数,它接受的是一个float数组,比喻说你定义一个有3列的表格,第一列的宽度为单位1,第二列也为单位1,第3列为单位2,那你就可以组织这样一个数组{1f,1f,2f},这个相关数组提供给这个构造函数以后,iText会为你自动计算,每一列到底应该多大。

 

一旦上面的这些操作完成,你还想改变表格的单元宽度,你可以使用setWidth()方法,我们也会在下面的例子里讲到。

 

更高级的部分请看:

 

If you want to work with absolute widths for the columns. You have to let iText calculate a widthpercentage for the table. In this case you should use: setWidthPercentage(float[] columnWidth, Rectangle pageSize). As you can see in the example, you need to do some calculations first to get the right pagesize.
It even easier to use absolute widths if you lock the width of the table to a 'total width'. You need the methods setTotalWidth and setLockedWidth for this. In the example the relation between the different cells will remain 10%, 10%, 5%, 75%, so you'll have 2 columns with a width of 30pt, one with a width of 15pt and one that's 225pt wide.
package com.itext.test;

 

import java.io.FileOutputStream;

 

import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

 

/**
 * 定义PdfPTable的列宽.
 */
public class CellWidths {

 

 /**
  Width manipulations of cells.
 

  @param args
 
            no arguments needed
  */
 public static void main(String[] args) {

 

  System.out.println("Width");
  // 步骤 1: 创建一个document对象,大小为A4,上下左右边距都为36
  Document document = new Document(PageSize.A4, 36, 36, 36, 36);
  try {
   // 步骤 2:
   // 我们为document创建一个监听,并把PDF流写到文件中
   PdfWriter.getInstance(document, new FileOutputStream(
     "c:\\CellWidths.pdf"));
   // 步骤 3:打开文档
   document.open();
   // 创建一个有4列的表格,它们之间的相关比率为 10%,10%,5%,75%
   document.add(new Paragraph("We use 10%,10%,5%,75%:\n\n"));
   float[] widths = { 0.1f, 0.1f, 0.05f, 0.75f };
   PdfPTable table = new PdfPTable(widths);
   table.addCell("10%");
   table.addCell("10%");
   table.addCell("5%");
   table.addCell("75%");
   table.addCell("aa");
   table.addCell("aa");
   table.addCell("a");
   table.addCell("aaaaaaaaaaaaaaa");
   table.addCell("bb");
   table.addCell("bb");
   table.addCell("b");
   table.addCell("bbbbbbbbbbbbbbb");
   table.addCell("cc");
   table.addCell("cc");
   table.addCell("c");
   table.addCell("ccccccccccccccc");
   // 把定义好的表格增加到文档中
   document.add(table);
   document.add(new Paragraph("We change the percentages,20%,20%,10%,50%:\n\n"));
   // 修改表格列关联比 ,现在为20%,20%,10%,50%
   widths[0] = 20f;
   widths[1] = 20f;
   widths[2] = 10f;
   widths[3] = 50f;
   // 这句完成了表格列宽的修改
   table.setWidths(widths);
   document.add(table);
   // 再改变,使用绝对宽度
   widths[0] = 40f;
   widths[1] = 40f;
   widths[2] = 20f;
   widths[3] = 300f;
   // 定义右边距和上边距
   Rectangle r = new Rectangle(PageSize.A4.right(72), PageSize.A4
     .top(72));
   table.setWidthPercentage(widths, r);
   document.add(new Paragraph(
     "We change the percentage using absolute widths,40,40,20,300:\n\n"));
   document.add(table);
   // 使用一个固定的大小
   document.add(new Paragraph("We use a locked width,300:\n\n"));
   // 设置表格宽度
   table.setTotalWidth(300);
   table.setLockedWidth(true);
   document.add(table);
  } catch (Exception de) {
   de.printStackTrace();
  }
  // 步骤 5:关闭文档
  document.close();
 }
}

分享到:
评论

相关推荐

    itext操作word的jar包和api

    **IText 操作 Word 的 API 和 Jar 包详解** IText 是一个强大的开源库,主要用于创建和修改 PDF 文件。然而,通过特定的扩展和库,IText 也可以用于处理 Microsoft Word 文档。在 Java 开发环境中,我们通常会依赖...

    itext合并和拆分PDF实例

    根据提供的文件信息,我们可以深入探讨如何使用iText库在Java环境中进行PDF文件的合并与拆分操作。以下是对这些操作的详细解释。 ### iText简介 iText 是一个开源库,用于生成、修改以及处理PDF文件。它支持多种...

    JAVA 操作PDF itext5.05

    ### IText库与Java操作PDF文档 #### 一、IText简介 IText是一款功能强大的开源Java库,用于创建和操作PDF文档。自1999年发布以来,IText已成为许多开发人员处理PDF文件的首选工具。它支持多种语言环境,包括中文,...

    itext7jar包

    **IText7.jar包详解** IText7是一个广泛使用的Java库,主要用于创建、修改和处理PDF文档。这个jar包集合提供了全面的API,使得开发者能够高效地进行PDF文档的编程操作,无需深入理解PDF格式的复杂性。在项目中直接...

    itextpdf-5.4.3.jar

    《Java操作PDF文档:iTextPDF 5.4.3详解》 在信息化时代,PDF(Portable Document Format)因其跨平台、格式保真等特性,成为广泛应用的文档格式。Java作为一门广泛使用的编程语言,自然也需要处理PDF文档的能力。...

    itextpdf-5.5.12+itext-asian

    《Java开发中的PDF文件处理:iTextPDF 5.5.12与iText-Asian详解》 在Java开发环境中,处理PDF文档是一项常见的任务,无论是生成报告、合同还是其他类型的文档,PDF格式因其跨平台性和高保真度而被广泛应用。iText...

    itext5-5.5.12

    《iText5:PDF处理利器详解》 在IT领域,PDF(Portable Document Format)作为一种广泛使用的文档格式,常用于创建、分享和打印高质量的文档。处理PDF文档时,开发者经常需要用到像iText这样的库。iText是一个开源...

    itext demo

    《iText演示详解》 在IT领域,iText是一款广泛使用的Java库,专门用于创建、修改PDF文档。本文将深入探讨iText的核心功能,并通过一个简单的示例项目——"itextdemo",来帮助读者理解如何运用iText进行PDF操作。 ...

    itext5.5.6大全.rar

    《iText 5.5.6 全集详解》 iText 是一款广泛使用的开源Java库,用于处理PDF文档。这个“iText5.5.6大全.rar”压缩包包含了iText库的不同版本和扩展,包括`itext-asian.jar`、`itextpdf-5.5.6.jar`、`itext-pdfa-...

    最新 iText语言包

    **iText亚洲语言包详解** iText是一款广泛使用的开源Java库,主要用于创建和修改PDF文档。这个库在处理PDF文档时提供了丰富的功能,包括文本排版、图像处理、表单填写等。对于处理中文、日文、韩文等亚洲语言,...

    itextpdf-5.5.5

    1. **文本操作**:iTextPDF可以轻松添加、格式化和定位文本。通过`ColumnText`类,开发者可以实现多列文本布局;通过`Paragraph`、`Chunk`等类,可以控制文本样式,如字体、大小、颜色等。 2. **图像处理**:支持...

    java iText jar包

    这个jar包集合包含了处理PDF、Word和Excel文档所需的多个组件,使得开发者能够轻松地进行文本操作、表格构建、图像插入以及更多高级功能。以下是这些jar包的功能详解: 1. iText-2.0.8.jar:这是iText的核心库,...

    itext最新版本源代码

    **IText PDF处理库详解** IText是一款广泛使用的开源Java库,专用于处理PDF文档。其最新版本为5.5.13,提供了强大的功能,包括但不限于创建、编辑、解析和签署PDF文档。本文将深入探讨IText的核心特性和使用方法。 ...

    itext7 根据pdf模板填充图像框

    ### itext7根据PDF模板填充图像框的知识点详解 #### 一、背景介绍 在实际工作中,经常需要根据模板批量生成PDF文档,特别是在人事管理、财务报表等领域。使用itext7进行PDF文档处理是一个非常实用的选择。itext7是...

    Itext5.3.0,5.5.1

    **Itext库详解** Itext是一款强大的开源Java库,专门用于处理PDF(Portable Document Format)文档。这个库在IT行业中广泛使用,特别是在需要创建、编辑、读取或更新PDF文件时。标题提到的"Itext5.3.0,5.5.1"是指...

    itext 2.1.7工具包及demo,java生成pdf

    **IText 2.1.7工具包及Demo:Java生成PDF详解** IText是一款功能强大的Java库,专用于创建、编辑和修改PDF文档。在2.1.7这个版本中,它还是遵循Apache License 2.0,允许商业免费使用,而之后的版本则转向了GPL协议...

    itext-5.5.6

    **IText库详解** IText是一款强大的开源Java库,专门用于生成和处理PDF(Portable Document Format)文档。在"itext-5.5.6"这个版本中,提供了丰富的功能来帮助开发者创建、编辑和操作PDF文件。这个压缩包包含了...

    itextpdf-5.5.10

    《iTextPDF 5.5.10:PDF处理与数字签名详解》 iTextPDF是一款功能强大的Java库,专用于创建、修改和处理PDF文档。版本5.5.10是其发展的一个里程碑,提供了丰富的API和稳定的功能,使得开发者能够轻松地在应用程序中...

    itextpdf-5.4.3.jar java 转pdf 工具类 jar

    《Java使用iTextPDF库创建和操作PDF文档详解》 在Java开发中,有时我们需要将数据转换为PDF格式,以便于打印、分享或长期存储。这时,iTextPDF库成为了一个强大的工具。本文将深入探讨如何使用iTextPDF 5.4.3版本的...

Global site tag (gtag.js) - Google Analytics