【java Itext Pdf】itext pdf隔行换色 itext5添加表格背景颜色

简介: Itext5 pdf 行变色效果图: 新需求,隔行换色,itext in action 是个很好的说明书,照着英文读下来,很简单的进行了实现,思路如下:   1.先创建PdfPTable对象,生成PDF表格cell之后,添加隔行换色的事件,将此事件在PdfPTable加入Document对象之前,插入进去 2.隔行换色的事件需要自己写一个java类,里面去定义背景颜色和长宽高,实质就是在pdf表格生成之后,去读取当页page内的所有行和列,并创建一个矩形,加入背景,覆盖到cell内,达到背景有颜色的效果。

Itext5 pdf 行变色效果图:

新需求,隔行换色,itext in action 是个很好的说明书,照着英文读下来,很简单的进行了实现,思路如下:

 

1.先创建PdfPTable对象,生成PDF表格cell之后,添加隔行换色的事件,将此事件在PdfPTable加入Document对象之前,插入进去

2.隔行换色的事件需要自己写一个java类,里面去定义背景颜色和长宽高,实质就是在pdf表格生成之后,去读取当页page内的所有行和列,并创建一个矩形,加入背景,覆盖到cell内,达到背景有颜色的效果。

 

隔行换色的java类:要实现PdfPTableEvent这个接口,否则就没有然后了。

 

AlternatingBackground.java

/**
 * Project Name:report
 * File Name:AlternatingBackground.java
 * Package Name:com.riambsoft.report.util
 * Date:2013-5-27上午11:08:30
 * Copyright (c) 2013, riambsoft All Rights Reserved.
 *
 */
     
package com.itext.me;
     
import java.awt.Color;
import java.lang.management.ManagementFactory;
     
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
     
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPTableEvent;
     
/**
 * ClassName:AlternatingBackground <br/> Function: TODO ADD FUNCTION. <br/> Reason: TODO ADD REASON. <br/> Date: 2013-5-27 上午11:08:30 <br/>
 * 
 * @author Administrator
 * @version
 * @since JDK 1.5
 * @see
 */
public class AlternatingBackground implements PdfPTableEvent {
     
    public void tableLayout(PdfPTable table, float[][] widths, float[] heights, int headerRows, int rowStart, PdfContentByte[] canvases) {
             
        int columns;
        Rectangle rect;  
             
        //合适的颜色:(235,235,235)
        int footer = widths.length - table.getFooterRows();
        int header = table.getHeaderRows() - table.getFooterRows() + 1;
        for (int row = header; row < footer; row += 2) {
            columns = widths[row].length - 1;
            rect = new Rectangle(widths[row][0], heights[row], widths[row][columns], heights[row + 1]);
            rect.setBackgroundColor(new BaseColor(235,235,235));
            rect.setBorder(Rectangle.NO_BORDER);
            canvases[PdfPTable.BASECANVAS].rectangle(rect);
        }
    }
     
}

然后再在你的pdf生成类里面,去new 一个这个事件,加到pdftable中即可。LOOK

/**
 * Project Name:TestItext
 * File Name:TestPdf.java
 * Package Name:com.itext.me
 * Date:2013-5-28下午03:38:17
 * Copyright (c) 2013, riambsoft All Rights Reserved.
 *
 */
      
package com.itext.me;
      
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
      
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPTableEvent;
import com.itextpdf.text.pdf.PdfWriter;
      
/**
 * ClassName:TestPdf <br/> Function: TODO ADD FUNCTION. <br/> Reason: TODO ADD REASON. <br/> Date: 2013-5-28 下午03:38:17 <br/>
 * 
 * @author Administrator
 * @version
 * @since JDK 1.5
 * @see
 */
public class TestPdf {
      
    /**
     * main:(这里用一句话描述这个方法的作用). <br/>
     * 
     * @param args
     * @throws IOException 
     * @throws DocumentException 
     * @since JDK 1.5
     */
    public static void main(String[] args) throws IOException, DocumentException {
      
        String fileDesc = "";
        FileOutputStream outr = null;// 创建输出流
        // 生成随机数
        Random random = new Random();
        int x = random.nextInt();
        fileDesc = "c:\\pdftest\\" + "_" + x + ".pdf";// 路径下一定要有此文件
        BaseFont baseFontChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        Font fontChinese = new Font(baseFontChinese, 12, Font.NORMAL);
        // step 1
        Document document = new Document();
        // step 2
        try {
            outr = new FileOutputStream(fileDesc);
            PdfWriter.getInstance(document, outr);
            // step 3
            document.open();
            // step 4
            PdfPTable table = new PdfPTable(3);
            // the cell object
            PdfPCell cell;
            // we add a cell with colspan3
            cell = new PdfPCell(new Phrase("Cell with colspan 3"));
            cell.setColspan(3);
            table.addCell(cell);
            // now we add a cell with rowspan2
            cell = new PdfPCell(new Phrase("Cell with rowspan 2 跨行", fontChinese));
            cell.setRowspan(2);
            // cell.setHorizontalAlignment(Element.ALIGN_MIDDLE);
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            table.addCell(cell);
            // we add the four remaining cells with addCell()
            table.addCell("row 1-1; cell 1");
            table.addCell("row 1-2; cell 2");
      
            cell = new PdfPCell(new Phrase("Cell with rowspan 2 跨行", fontChinese));
            table.addCell("row 2-1; cell 1");
            table.addCell("row 2-2; cell 2");
                  
            table.addCell("row 3-1; cell 1");
            table.addCell("row 3-2; cell 2");
            table.addCell("row 3-3; cell 3");
                  
            table.addCell("row 4-1; cell 1");
            table.addCell("row 4-2; cell 2");
            table.addCell("row 4-3; cell 3");
                  
            table.addCell("row 5-1; cell 1");
            table.addCell("row 5-2; cell 2");
            table.addCell("row 5-3; cell 3");
                  
            table.addCell("row 6-1; cell 1");
            table.addCell("row 6-2; cell 2");
            table.addCell("row 6-3; cell 3");
                  
            table.addCell("row 7-1; cell 1");
            table.addCell("row 7-2; cell 2");
            table.addCell("row 7-3; cell 3");
                  
            table.addCell("row 8-1; cell 1");
            table.addCell("row 8-2; cell 2");
            table.addCell("row 8-3; cell 3");
                  
            table.addCell("row 9-1; cell 1");
            table.addCell("row 9-2; cell 2");
            table.addCell("row 9-3; cell 3");
                  
                  
            //加入隔行换色事件
            PdfPTableEvent event = new AlternatingBackground();
            table.setTableEvent(event);
            //end
                  
                  
            document.add(table);
            document.close();
        } catch (DocumentException e1) {
            e1.printStackTrace();
        } finally {
            if (outr != null) {
                outr.close();
            }
            String cmd = "\"C:\\Program Files\\Foxit Software\\Foxit Reader\\Foxit Reader.exe\" ";// 这个是命令行打开福昕阅读器,我的福昕安装路径,你可以仿造我的写一个。
            System.out.println(cmd + "\"" + fileDesc + "\"" + " -n");
            Runtime.getRuntime().exec(cmd + "\"" + fileDesc + "\"" + " -n");
            // 打开pdf
        }
    }
      
}

结果图:

所有源码+jar包+doc文档 下载:http://download.csdn.net/detail/ae6623/5471531

落雨 csdn 本文:http://blog.csdn.net/ae6623/article/details/8987645

落雨

2013年5月29日9:19:03

qq 394263788

 

目录
相关文章
|
9天前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
20 4
|
2月前
|
安全 搜索推荐 iOS开发
WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑
WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑
109 8
WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑
|
7月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
502 5
|
4月前
|
文字识别
【PDF提取全自动改名】如何批量提取PDF指定区域的文字内容,用内容批量给PDF命名或者导出表格,学会全自动解放双手
在生活和工作中,我们常需处理大量PDF文件,如银行单据、税收单据等。手动处理效率低下,而使用“咕嘎批量PDF多区域内容提取重命名导表格系统”可快速完成数千份文档的处理,大幅提高效率。该工具通过获取PDF各区域内容坐标,导入并处理文件,最终将信息提取至表格,并根据关键信息对PDF进行重命名,方便管理和查找。
316 2
|
4月前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
425 8
|
5月前
|
人工智能 文字识别 自然语言处理
Vision Parse:开源的 PDF 转 Markdown 工具,结合视觉语言模型和 OCR,识别文本和表格并保持原格式
Vision Parse 是一款开源的 PDF 转 Markdown 工具,基于视觉语言模型,能够智能识别和提取 PDF 中的文本和表格,并保持原有格式和结构。
693 19
Vision Parse:开源的 PDF 转 Markdown 工具,结合视觉语言模型和 OCR,识别文本和表格并保持原格式
|
8月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
1556 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
9月前
|
人工智能 JavaScript Java
java表格识别PaddleOcr总结
本文介绍了使用OpenCV和PaddleOCR进行表格识别的方法。通过OpenCV进行图像处理,并利用PaddleOCR进行文字识别。文中详细描述了在Windows和Linux环境下搭建PaddleOCR环境的过程,包括解决CMake依赖问题、生成DLL文件等。此外,还提供了C++代码示例说明如何导出识别结果,并探讨了Java环境下使用JNA进行复杂对象传递遇到的问题及解决方案。作者分享了在表格识别项目中的实践经验,包括处理模型转换和优化等方面的挑战。
302 5
java表格识别PaddleOcr总结
|
8月前
|
存储 Java API
如何使用 Java 中的 API 更改 PDF 纸张大小
如何使用 Java 中的 API 更改 PDF 纸张大小
115 11
|
8月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
2538 1