`
小杨学JAVA
  • 浏览: 901461 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iText学习 ---表格

 
阅读更多

iText学习 ---表格

iText学习第二天---表格

 

一个最基本的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();
 }
}

 

 

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

分享到:
评论

相关推荐

    itext7-7.zip

    了解了这些组件后,我们可以开始学习如何使用iText7。创建一个简单的PDF文档,首先要引入核心库,然后创建`PdfWriter`和`PdfDocument`对象,接着通过`Document`对象添加内容,如文本、图像或表格。对于复杂的布局,...

    itextpdf-5.5.10 源码、jar包、doc文档

    ITextPDF是一个广泛使用的Java库,用于创建、修改和处理PDF文档。这个资源包包含的是itextpdf的5.5.10版本,它提供了源代码、jar包和文档,对于开发者来说是非常宝贵的参考资料。 首先,我们来详细了解**itextpdf库...

    itextpdf-5.5.13.jar,jacob.jar以及jacob.dll文件

    iText 5.5.13是该库的一个稳定版本,提供了丰富的API,使得开发者能够轻松地添加文本、图像、表格、链接等元素到PDF文档中。同时,它也支持从HTML、XML或者其他文档格式转换为PDF。iText的强大功能使得它在各种业务...

    Java_Pdf_itext7-7.0.5

    9. **表格和列表**:库提供了方便的API来创建复杂的表格和列表,包括列宽计算、单元格样式等。 10. **PDF/A和PDF/EPUB兼容性**:iText7可以生成符合PDF/A(长期保存的标准)和PDF/EPUB(电子书格式)的文档。 11. ...

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

    除了基本的文字和图像,iTextPDF还支持更复杂的操作,如创建表格、列表、超链接等。例如,创建一个表格: ```java PdfPTable table = new PdfPTable(3); // 3列 table.addCell("Column 1"); table.addCell("Column ...

    itext-2.1.7.jar itext-rtf-2.1.7.jar 和源码

    通过深入学习iText的API文档和官方示例,开发者可以构建出满足各种需求的复杂文档。 为了更好地理解iText的工作原理,可以下载提供的"itext-2.1.7-javadoc.zip"文件,查阅相关的API文档,这将有助于掌握更多的使用...

    【itext-asian】亚洲语言包

    iText提供了一系列API,可以方便地创建PDF文档,包括添加文本、图像、表格、超链接、数字签名等元素。它还支持对现有PDF进行操作,例如填充表单、提取文本、签署文档等。然而,由于亚洲字符集的复杂性,原始的iText...

    itextpdf-5.3.1

    `itextpdf-5.3.1-javadoc.jar`包含了API文档,是学习和使用iTextPDF的重要参考资料。 8. **扩展组件** `itext-xtra-5.3.1`扩展组件提供了更多的功能,如更复杂的表单处理、更多样的图像格式支持等。 9. **许可...

    itext-5.5.3.zip

    - `itextpdf-5.5.3-javadoc.jar`:包含了iText库的Java文档,是开发者理解和学习库函数的重要参考资料。 - `itextpdf-5.5.3-sources.jar`:源码包,允许开发者查看和研究库的内部实现,有助于深入学习和调试。 - ...

    itext-2.0.8-sources.jar_itext-2.0.8.jar_

    3. **PDF元素创建**:iText将HTML元素映射到PDF对象,例如将段落映射为`Paragraph`,表格映射为`Table`,图像映射为`Image`等。 4. **流式布局**:PDF是一种流式布局的文档,不同于HTML的块级和行内元素布局。iText...

    itext-5.4.3

    3. **表格创建**:提供表格对象,支持多行多列数据展示,可自定义单元格样式。 4. **超链接与书签**:可添加内部或外部链接,方便用户导航,同时支持创建PDF书签。 5. **表单处理**:支持AcroForm交互式表单的创建和...

    iText7全部资源

    3. **对象模型**:iText7引入了一个全新的对象模型,允许开发者以更直观的方式创建和操作PDF元素,如文本、图像、表格和表单字段。 4. **布局组件**:iText7提供了一套强大的布局组件,如Paragraph、Chunk、...

    itextpdf-5.1.0

    1. **PDF创建**:iTextPDF允许开发者动态生成PDF文档,包括文本、图像、表格、链接和各种图形元素。通过其API,可以轻松添加页眉、页脚,甚至复杂的布局设计。 2. **PDF编辑**:iTextPDF支持对已存在的PDF文档进行...

    itext-5.2.0.zip

    其次,`itextpdf-5.2.0-sources.jar`包含了源代码,这对于开发者来说非常有用,因为可以直接查看和理解iText的内部实现,有助于学习和调试。而`itextpdf-5.2.0-javadoc.jar`则包含了API文档,通过这个文件,开发者...

    itext5 jar 包

    **iText5** 是由iText Software Corporation开发的开源项目,它提供了丰富的API,可以处理PDF文档的各种需求,如添加文本、图像、表格、超链接、水印、数字签名等。iText5.3.0是该库的一个版本,发布于2014年,包含...

    iText5.3.3.jar

    iText库提供了丰富的API,允许开发者创建复杂的PDF文档,包括添加文本、图像、表格、链接等元素。此外,它还支持PDF/A(可存档PDF)标准,确保文档长期可读性和符合法规要求。 在压缩包中,我们可以看到多个不同...

    iText7——第七章源代码工程

    通过分析和运行这些示例代码,你不仅可以了解iText7的基本用法,还能学习到如何在实际项目中灵活运用这些功能。同时,博主的博客会提供更详细的解释和背景知识,有助于你深入理解每个功能背后的概念。如果你对PDF...

    itext5.5.6

    2. itextpdf-5.5.6-sources.jar:这个文件包含了iText库的源代码,开发者可以通过查看源码来学习iText的实现细节,或者进行调试和定制。 3. itextpdf-5.5.6.jar:这是iText的核心库文件,包含了所有用于创建和操作...

    itext-5.5.4.zip

    通过查看源代码,开发者可以学习如何实现特定的功能,或者根据需要进行定制和扩展。 3. **iTextpdf-5.5.4.jar**:这是核心的iText库文件,包含所有处理PDF文档所需的基本功能。包括创建新的PDF文档,添加文本、图像...

Global site tag (gtag.js) - Google Analytics