分享一个很简单的PDF表格生成工具(java itext)

因为做的项目涉及到数据预测,其中有大量打印业务来支撑实体店的运营,因为注重的是数据,要求简洁,清晰,所以写了个很简单也很实用的工具类。

如果需要编写样式或者插入背景,都可以查阅itex官方文档,进行扩展。

这个工具是基于 itext 写的,主要作用是生成最简洁的表格,选用的jar包版本是:

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

废话就不多说了,直接贴代码

import java.awt.Color;
import java.util.List;

import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;

public class PDFConstants {

    /**
     * PDF大标题字体
     */
    public static Font PDFTITLEFONT = new Font(null, 16, Font.BOLD);

    /**
     * PDF小标题字体
     */
    public static Font PDFTITLEFONT1 = new Font(null, 13, Font.NORMAL);

    /**
     * 表格宽度百分比
     */
    public static Integer WIDTHPERCENTAGE = 98;

    /**
     * 表格标题字体
     */
    public static Font TITLEFONT = new Font(null, 12, Font.COURIER);

    /**
     * 翻页加载表头
     */
    public static Integer HEADERROWS = 1;

    /**
     * 翻页不加载表头
     */
    public static Integer NOHEADERROWS = 0;

    /**
     * 表格内容字体
     */
    public static Font CONTENTFONT = new Font(null, 9, Font.NORMAL);

    /**
     * PDF表格样式
     */
    private static PdfPCell cell = new PdfPCell();

    /**
     * 获取表格
     */
    public static PdfPCell getCell() {
    // 水平居中
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    // 垂直居中
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    // 边距
    cell.setPadding(1);
    // 行高
    cell.setMinimumHeight(22);
    // 不换行
    // cell.setNoWrap(true);
    // 颜色淡化
    cell.setBorderColor(Color.decode("#EBEEF5"));
    return cell;
    }

    /**
     * 获取表格并赋值
     */
    public static PdfPCell getCell(Paragraph content) {
    cell = getCell();
    // 设置内容
    cell.setPhrase(content);
    return cell;
    }

    /**
     * @Description 生成PDF表格
     * @param titleNum
     *            列数
     * @param tableWidth
     *            列宽
     * @param titles
     *            标题集合
     * @param contents
     *            内容集合
     * @param headerRows
     *            是否再次加载表头
     * @return
     * @throws Exception
     */
    public static PdfPTable getPDFTable(int titleNum, int[] tableWidth, String[] titles, List<String> contents, int headerRows) throws Exception {
    // 创建表格对象
    // 列数
    PdfPTable table = new PdfPTable(titleNum);
    
    //表格宽度百分比
    table.setWidthPercentage(WIDTHPERCENTAGE);

    // 列宽百分比
    if (tableWidth != null)
        table.setWidths(tableWidth);

    // 翻页加载表头
    if (headerRows == HEADERROWS)
        table.setHeaderRows(HEADERROWS);

    // 标题集合
    String[] pdfTitles = titles;
    if (pdfTitles != null && pdfTitles.length > 0) {
        // 标题
        for (String pdfTitle : pdfTitles) {
        PdfPCell title = getCell(new Paragraph(pdfTitle, TITLEFONT));
        table.addCell(title);
        }
    }
    // 内容集合
    List<String> pdfContents = contents;
    if (pdfContents != null && pdfContents.size() > 0) {
        // 内容
        for (String pdfContent : pdfContents) {
        PdfPCell content = getCell(new Paragraph(pdfContent, CONTENTFONT));
        table.addCell(content);
        }
    }
    return table;
    }

}

具体调用方法不给demo了,拿出部分业务代码做例子,使用这个工具是很简单的

首先打开一个文档

  // 定义文件路径 你可以完成过程后删掉这个临时文件 或者存在tmp里
  File f = new File("xxxx/xxx.pdf");   FileOutputStream output = new FileOutputStream(f);   // 实例化文档对象   Document document = new Document(PageSize.A4, 0, 0, 0, 0);   // 创建 PdfWriter 对象 文件的输出路径+文件的实际名称   PdfWriter.getInstance(document, output);   document.open();// 打开文档
Document有横向属性 使用方法是 PageSize.A4.rotate()这个rotate方法是个神奇的方法
后面四个数字对应的是边距 分别是 左,右,上,下

生成table几个传参的例子

  // 标题
  String[] title = { "Min.", "SUN", "MON", "TUE", "WED", "THUR", "FRI", "SAT" };

  // 列数
  Integer titleNum = 8;

  // 列宽
  int tableWidth[] = { 15, 15, 15, 10, 10, 12, 12, 11 };
  
//内容   List<String> contents = new ArrayList<String>();   //TODO 业务代码填充contens   // 获取PDFTable   PdfPTable table = PDFConstants.getPDFTable(titleNum, tableWidth, title, contents, 0);

  //表格上间距   table.setSpacingBefore(0);   //添加进文档
  
document.add(table);
  //关闭文档
  
document.close();

就是这样了,标题已经提供直接使用的字体了,最常用的是Paragraph和Phrase,具体API可以自行翻阅,加油!



猜你喜欢

转载自www.cnblogs.com/-renyu/p/10457351.html