`
szw185
  • 浏览: 18567 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

完整的iText生成PdfPTable文件,并且转化成图片类

    博客分类:
  • java
 
阅读更多
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.RandomAccessFile; 
import java.nio.ByteBuffer; 
import java.nio.channels.FileChannel; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import com.itextpdf.text.BaseColor; 
import com.itextpdf.text.Document; 
import com.itextpdf.text.DocumentException; 
import com.itextpdf.text.Element; 
import com.itextpdf.text.Font; 
import com.itextpdf.text.Paragraph; 
import com.itextpdf.text.Rectangle; 
import com.itextpdf.text.pdf.BaseFont; 
import com.itextpdf.text.pdf.PdfPCell; 
import com.itextpdf.text.pdf.PdfPTable; 
import com.itextpdf.text.pdf.PdfWriter; 
import com.sun.image.codec.jpeg.JPEGCodec; 
import com.sun.image.codec.jpeg.JPEGImageEncoder; 
import com.sun.pdfview.PDFFile; 
import com.sun.pdfview.PDFPage; 

/** 
* 功能:生成pdf表格 、转化成图片 
* 
* @author Shizw 
* @CreateTime 2011-12-08 
*/ 
public class CreatePdfToImage { 
/** 
* 中文字体(默认黑体) 
* 具体字体可到C:\\WINDOWS\FONTS下去拷 
*/ 
public String character_font_ch = "simhei.TTF"; // 黑体 
/** 
* 左边距 
*/ 

public float margin_left = 2;; 
/** 
* 右边距 
*/ 
public float margin_right = 2; 
/** 
* 上边距 
*/ 
public float margin_top = 8; 
/** 
* 下边距 
*/ 
public float margin_bottom = 2; 
/** 
* 字体显示(水平或垂直)默认水平显示 
*/ 
public String identity = BaseFont.IDENTITY_H; 
/** 
* 字体大小(默认16) 
*/ 
public int size = 16; 
/** 
* 字体样式(默认NORMAL) 
*/ 
public int style = Font.NORMAL; 
/** 
* 字体颜色(默认黑色) 
*/ 
public BaseColor color = BaseColor.BLACK; 

/** 
* 设置表格所占pdf宽度的比例 默认100% 
*/ 
public float widthPercentage = 100; 
/** 
* 表格的单元格高度(默认28) 
*/ 
public float table_height = 28; 
/** 
* 单元格内容与左边距间隔(默认0) 
*/ 
public float padding_left = 0; 

/** 
* pdftable 
*/ 
private PdfPTable pdfTable; 
/** 
* ColorList 
*/ 
private List colorList = new ArrayList();// 设置字体颜色 
/** 
* 设置字体位置List 
*/ 
private List backList = new ArrayList(); 

/** 
* 设置字体align 
*/ 
public int align = Element.ALIGN_CENTER; 
/** 
* 默认行背景色 
*/ 
public BaseColor back_color = BaseColor.WHITE; 
/** 
* 行背景色list 
*/ 
private List backgroundList = new ArrayList(); 
/** 
* 自定义背景颜色 
*/ 
private BaseColor back_color_def; 
/** 
* 自定义列字体位置 
*/ 
private int align_def; 
private Document document = null; 

/** 
* 生成pdf并且生成图片 
* 
* @param fileName 
*            生成的.pdf文件路径及名称 
* @param path 
*            图片生成路径及名称(jpg 或png) 
* @param width 
*            图片宽度 
* @param rowHeight 
*            行高 
* @param cell_width 
*            列及列的宽度比例 
* @param content 
*            结果集 
* 
*/ 

public void createTabToImage(String fileName, String path, float width, 
float rowHeight, float[] cell_width, String[][] content) { 
try { 
int rownum = content.length; 
this.table_height=rowHeight; 
Rectangle rec = createHeWidth(width,rowHeight,rownum); 
createDocument(fileName,rec); 
BaseFont f = createChineseFont(); 
Font font = createFont(f, this.size, this.style, this.color); 
this.pdfTable = createTable(cell_width); 
PdfPCell cell; 
Font fonts = null; 
for (int i = 0; i < content.length; i++) { 
// 自定义行颜色 
for (int t = 0; t < backgroundList.size(); t++) { 
Map m = (Map) backgroundList.get(t); 
int row = ((Integer) m.get("row")).intValue(); 
BaseColor back_color = (BaseColor) m.get("color"); 
if (row == (i + 1)) { 
back_color_def = back_color; 
break; 
} else { 
back_color_def=this.back_color; 
} 
} 
// 自定义列的字体位置 
for (int j = 0; j < content[i].length; j++) { 
for (int c = 0; c < backList.size(); c++) { 
Map m = (Map) backList.get(c); 
int cols = ((Integer) m.get("cols")).intValue(); 
int align = ((Integer) m.get("align")).intValue(); 
if (cols == (j + 1)) { 
align_def = align; 
break; 
} else { 
align_def=this.align ; 
} 
} 
if (content[i].length < cell_width.length) {// 列数不足时,自动把最后一个cell 
// 合并单元格 
if (j == content[i].length - 1) { 
// 自定义字体的颜色 
for (int k = 0; k < colorList.size(); k++) { 
Map m = (Map) colorList.get(k); 
int row = ((Integer) m.get("row")).intValue(); 
int cols = ((Integer) m.get("cols")).intValue(); 
BaseColor colors = (BaseColor) m.get("color"); 
if ((i + 1) == row && (j + 1) == cols) { 
fonts = new Font(f, this.size, this.style, 
colors); 
break; 
} else { 
fonts = font; 
} 
} 

cell = addToTable(content[i][j], fonts); 
cell.setColspan(cell_width.length 
- content[i].length + 1); 
this.pdfTable.addCell(cell); 
} else { 
for (int k = 0; k < colorList.size(); k++) { 
Map m = (Map) colorList.get(k); 
int row = ((Integer) m.get("row")).intValue(); 
int cols = ((Integer) m.get("cols")).intValue(); 
BaseColor colors = (BaseColor) m.get("color"); 
if ((i + 1) == row && (j + 1) == cols) { 
fonts = new Font(f, this.size, this.style, 
colors); 
break; 
} else { 
fonts = font; 
} 
} 

cell = addToTable(content[i][j], fonts); 
this.pdfTable.addCell(cell); 
} 
} else { 
for (int k = 0; k < colorList.size(); k++) { 
Map m = (Map) colorList.get(k); 
int row = ((Integer) m.get("row")).intValue(); 
int cols = ((Integer) m.get("cols")).intValue(); 
BaseColor colors = (BaseColor) m.get("color"); 
if ((i + 1) == row && (j + 1) == cols) { 
fonts = new Font(f, this.size, this.style, 
colors); 
break; 
} else { 
fonts = font; 
} 
} 
cell = addToTable(content[i][j], fonts); 
this.pdfTable.addCell(cell); 
} 

} 

} 
addTable(this.pdfTable); 
closeDocument(); 
setup(fileName, path); 
} catch (Exception ex) { 
ex.printStackTrace(); 
} 
} 

/** 
* 自定义字体颜色3 
* 
* @param row 
*            行 
* @param cols 
*            列 
* @param color 
*            颜色 
*/ 
public void setCellStyle(int row, int cols, BaseColor color) { 
try { 
Map m = new HashMap(); 
m.put("row", Integer.valueOf(row)); 
m.put("cols", Integer.valueOf(cols)); 
m.put("color", color); 
colorList.add(m); 
} catch (Exception ex) { 
ex.printStackTrace(); 
} 
} 

/** 
* 设置单元格的对齐方式,只能指定列 
* 
* @param cols 
* @param Element.ALIGN_CENTER,Element.ALIGN_LEFT 
*            等 
*/ 
public void setAlign(int cols, int align) { 
Map m = new HashMap(); 
m.put("cols", Integer.valueOf(cols)); 
m.put("align", Integer.valueOf(align)); 
backList.add(m); 
} 

/** 
* 设置背景色,只能指定行 
* 
* @param row 
* @param color 
*/ 
public void setBackgroundColor(int row, BaseColor color) { 
Map m = new HashMap(); 
m.put("row", Integer.valueOf(row)); 
m.put("color", color); 
backgroundList.add(m); 
} 

/** 
* 创建pdf文档 
* 
* @param fileName 
*            pdf文件 
* @param rectangle 
*            页面大小 
*/ 
private void createDocument(String fileName, Rectangle rectangle) { 
File file = new File(fileName); 
FileOutputStream out = null; 
document = new Document(rectangle, this.margin_left, this.margin_right, 
this.margin_top, this.margin_bottom); 

try { 
out = new FileOutputStream(file); 
PdfWriter.getInstance(document, out); 
} catch (FileNotFoundException ex) { 
ex.printStackTrace(); 
} catch (DocumentException e) { 
e.printStackTrace(); 
} 
document.open(); 
} 

/** 
* 创建pdf的宽度\高度 返回一个Rectangle ,createDocument时用 
* 
* @param rowHeight 
*            行高 
* @param rownum 
*            表格的行数 
* @param width 
*            pdf宽度 
* @return Rectangle 
*/ 
private Rectangle createHeWidth(float width, float rowHeight, int rownum) { 
return new Rectangle(width, rowHeight * (rownum + 1)); 
} 

/** 
* 功能:返回支持中文的字体,字体样式等 
* 
* @return Font 
*/ 
private BaseFont createChineseFont() { 
BaseFont bfChinese = null; 
try { 
bfChinese = BaseFont.createFont(this.character_font_ch, 
this.identity, BaseFont.EMBEDDED); 
} catch (DocumentException e) { 
e.printStackTrace(); 
} catch (IOException io) { 
io.printStackTrace(); 
} 
return bfChinese; 
} 

/** 
* 创建字体样式 
* 
* @param font 
* @param size 
*            大小 
* @param style 
*            Font.NORMAL 等 
* @param color 
*            颜色 
* @return 
*/ 
private Font createFont(BaseFont font, int size, int style, BaseColor color) { 
return new Font(font, size, style, color); 
} 

/** 
* 功能:返回支持中文的字体,字体样式等 
* 
* @param size 
*            字体大小 
* @param style 
*            字体 
* @param font 
*            Font.NORMAL,Font.BOLD等 
* @param color 
*            字体颜色 
*/ 
private Font createChineseFont(int size, int style, BaseColor color) { 
BaseFont bfChinese = null; 
Font font = null; 
try { 
bfChinese = BaseFont.createFont(this.character_font_ch, 
this.identity, BaseFont.EMBEDDED); 
} catch (DocumentException e) { 
e.printStackTrace(); 
} catch (IOException io) { 
io.printStackTrace(); 
} 
font = new Font(bfChinese, size, style, color); 
return font; 
} 

/** 
* 功能:创建一个空表格 
* 
* @param cell_perct 
*            数组,设定列的数目,及每列所占表格比例 
*            例:5列及比例cell_widths[]={0.4f,0.1f,0.15f,0.15f,0.15f}; 
*/ 

private PdfPTable createTable(float[] cell_width) { 
// 生成一个表格 
PdfPTable table = new PdfPTable(cell_width); 
table.setWidthPercentage(this.widthPercentage); 
return table; 
} 

/** 
* 创建单元格,添加到表格,默认字体居中,背景色白色 
* 
*/ 
private PdfPCell addToTable(String content, Font fonts) { 
PdfPCell cell; 
cell = new PdfPCell(new Paragraph(content, fonts)); 
cell.setFixedHeight(this.table_height); 
cell.setHorizontalAlignment(this.align_def); 
cell.setBackgroundColor(this.back_color_def); 
cell.setVerticalAlignment(Element.ALIGN_MIDDLE); 
cell.setPaddingLeft(this.padding_left); 
return cell; 
} 

/** 
* 把表格添加到pdf中 
*/ 

private void addTable(PdfPTable table) { 
try { 
if (document != null) { 
if(table!=null){ 
document.add(table); 
} 
} 
} catch (Exception ex) { 
ex.printStackTrace(); 
} 

} 

/** 
* 把表格添加到pdf中 
*/ 

private void addTable() { 
try { 
if (document != null) { 
if (this.pdfTable != null) { 
document.add(this.pdfTable); 
} 
} 
} catch (Exception ex) { 
ex.printStackTrace(); 
} 

} 

/** 
* 功能:关闭文档 
*/ 
private void closeDocument() { 
if (document != null) { 
document.close(); 
} 
} 

/** 
* 生成图片 
* 
* @return 
*/ 
private void setup(String fileName, String path) throws IOException { 
File file = new File(fileName); 
RandomAccessFile raf = new RandomAccessFile(file, "r"); 
FileChannel channel = raf.getChannel(); 
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel 
.size()); 
PDFFile pdffile = new PDFFile(buf); 

for (int i = 1; i <= pdffile.getNumPages(); i++) { 
PDFPage page = pdffile.getPage(i); 
java.awt.Rectangle rect = new java.awt.Rectangle(0, 0, (int) page 
.getBBox().getWidth(), (int) page.getBBox().getHeight()); 
Image img = page.getImage(rect.width, rect.height, // width & // 
// height 
rect, // clip rect 
null, // null for the ImageObserver 
true, // fill background with white 
true // block until drawing is done 
); 
BufferedImage tag = new BufferedImage(rect.width, rect.height, 
BufferedImage.TYPE_INT_RGB); 
tag.getGraphics().drawImage(img, 0, 0, rect.width, rect.height, 
null); 
FileOutputStream out; 
if(i>1){ 
System.out.println(path.substring(0,path.length()-4)); 
out = new FileOutputStream(path.substring(0,path.length()-4)+i+path.substring(path.length()-4)); 
}else{ 
out = new FileOutputStream(path); 
} 

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
encoder.encode(tag); // JPEG 

out.close(); 
} 

} 

public float getMargin_left() { 
return margin_left; 
} 

/** 
* 设置左边距 
* 
* @param margin_left 
*/ 
public void setMargin_left(float margin_left) { 
this.margin_left = margin_left; 
} 

public float getMargin_right() { 
return margin_right; 
} 

/** 
* 设置右边距 
* 
* @param margin_right 
*/ 
public void setMargin_right(float margin_right) { 
this.margin_right = margin_right; 
} 

public float getMargin_top() { 
return margin_top; 
} 

/** 
* 设置上边距 
* 
* @param margin_top 
*/ 
public void setMargin_top(float margin_top) { 
this.margin_top = margin_top; 
} 

public float getMargin_bottom() { 
return margin_bottom; 
} 

public void setMargin_bottom(float margin_bottom) { 
this.margin_bottom = margin_bottom; 
} 

public String getCharacter_font_ch() { 
return character_font_ch; 
} 

/** 
* 设置中文字体(仿宋、黑体等) 
* 
* @param character_font_ch 
*/ 
public void setCharacter_font_ch(String character_font_ch) { 
this.character_font_ch = character_font_ch; 
} 

public String getIdentity() { 
return identity; 
} 

/** 
* 字体显示(水平或垂直)BaseFont.IDENTITY_H 等 
* 
* @param identity 
*/ 
public void setIdentity(String identity) { 
this.identity = identity; 
} 

public int getSize() { 
return size; 
} 

/** 
* 设置字体大小 
* 
* @param size 
*/ 
public void setSize(int size) { 
this.size = size; 
} 

public int getStyle() { 
return style; 
} 

/** 
* 设置字体样式 
* 
* @param style 
*/ 
public void setStyle(int style) { 
this.style = style; 
} 

public BaseColor getColor() { 
return color; 
} 

/** 
* 设置字体颜色 
* 
* @param color 
*/ 
public void setColor(BaseColor color) { 
this.color = color; 
} 

public float getWidthPercentage() { 
return widthPercentage; 
} 

/** 
* 设置表格宽度 
* 
* @param widthPercentage 
*/ 
public void setWidthPercentage(float widthPercentage) { 
this.widthPercentage = widthPercentage; 
} 

public float getTable_height() { 
return table_height; 
} 

/** 
* 设置表格单元格的高度 
* 
* @param table_height 
*/ 
public void setTable_height(float table_height) { 
this.table_height = table_height; 
} 

public float getPadding_left() { 
return padding_left; 
} 

public void setPadding_left(float padding_left) { 
this.padding_left = padding_left; 
} 

public int getAlign() { 
return align; 
} 

public void setAlign(int align) { 
this.align = align; 
} 
public BaseColor getBack_color() { 
return back_color; 
} 

public void setBack_color(BaseColor back_color) { 
this.back_color = back_color; 
} 


} 


 

 

分享到:
评论

相关推荐

    使用itext生成PDF文件

    5. **图片和图像**:要插入图片,需要使用Image类,并指定图片文件的路径: ```java Image image = Image.getInstance("image.jpg"); document.add(image); ``` 6. **表格和列表**:iText也提供了创建表格...

    itext生成pdf文件-表格

    对于生成表格,iText提供了一个名为`PdfPTable`的类,它是表格的核心组件。 创建一个简单的表格,首先要导入必要的iText库,并初始化一个`Document`对象,接着创建一个`PdfPTable`实例。例如: ```java import ...

    java itext生成PDF文件

    iText提供了一个名为`PdfPTable`的类,用于创建表格。你可以通过指定列数、行数以及单元格的宽度来构建表格。如果需要合并单元格,可以使用`setMergeFirst()`和`setMergeLast()`方法。比如,如果你想合并一整行的两...

    解决Itext生成PDF中文不换行的jar

    `core-renderer-R8-20170706.jar.sha1`是文件的SHA1校验和,用于验证文件的完整性和未被篡改。 总之,处理Itext生成PDF时的中文换行问题,关键在于正确设置字体、编码和布局策略。如果遇到困难,不妨尝试更新库或...

    java 通过使用itext 生成2003 word 文档(java生成word文档2)

    如果你的项目需要在没有构建工具的情况下运行,你需要确保`lib`目录下的iText JAR文件被正确地包含在运行时的类路径中。 总的来说,使用iText生成2003版Word文档涉及创建`Document`对象,添加内容元素,以及设置...

    itext中文文档,生成PDF供前台打印及下载

    根据提供的文件信息,以下是关于使用iText生成PDF文档供前台打印及下载的详细知识点: ### iText生成PDF文档的概述 iText是一个用于创建和操作PDF文档的Java类库。它可以让开发者通过编写代码来生成PDF文件,以...

    java使用IText导出PDF(包含图片、表格、文字等等Demo和依赖包)

    运行这个Demo,你应该能得到一个包含文字、图片和表格的完整PDF文件。 在开发过程中,你可能会遇到各种问题,比如字符编码、图像缩放、页面布局等。IText库提供了丰富的API来处理这些问题,但需要仔细阅读官方文档...

    itext 生成 pdf 文档

    在这个主题中,我们将深入探讨如何利用Itext进行PDF文档的生成。 ### 1. PDF基础 PDF(Portable Document Format)是一种跨平台的文件格式,能够保持文档的原始布局和样式,无论在何种设备上查看。Itext作为PDF...

    iText生成pdf使用教程及一系列demo源码

    iText是一款广泛使用的Java库,专门用于生成和操作PDF文档。在IT领域,尤其是在文档处理和报告生成中,iText有着重要地位...结合提供的教程和源码,你将能快速上手并灵活运用iText生成包含中文、图片和表格的PDF文件。

    itext报表生成工具

    在提供的压缩包文件"itext报表生成工程"中,可能包含了示例代码、配置文件、资源文件等,这些可以帮助你更好地理解和实践IText报表生成。通过研究这些文件,你可以学习到如何将IText库集成到你的项目中,以及如何...

    使用ITEXT导出EXCEL工具类

    但我们可以利用ITEXT的`PdfWriter`和`Document`类来模拟Excel的表格结构,然后将生成的PDF转换为XLS或XLSX格式。以下是一些关键步骤: 1. **初始化**: 创建一个`Document`对象,它是ITEXT文档的基本构建块。这将...

    iText 生成 PDF

    iText 提供了 `PdfStamper` 类来处理现有的 PDF 文件,其中包括填充表单的功能。这为生成带有特定样式的报表提供了一种简单有效的方法: 1. **Word 制作报表样式**:使用 Microsoft Word 设计报表模板。 2. **...

    itext5.5.10生成PDF

    在iText中,`PdfWriter`是负责将数据写入PDF文件的核心类,而`PdfDocument`则用来管理PDF文档的结构。例如,你可以这样创建一个新的PDF文档: ```java PdfWriter writer = PdfWriter.getInstance(document, new ...

    itextpdf.zip(JavaPDF文件生成)

    JavaPDF文件生成是Java开发中一个重要的领域,主要用于创建、编辑和处理PDF文档。iTextPDF是一个流行的开源库,它提供了丰富的API,使得在Java环境中生成高质量的PDF文档变得简单易行。本篇文章将深入探讨如何使用...

    iTextSharp教程C#生成PDF文件

    这个教程主要聚焦于使用C#编程语言来生成PDF文件,通过iTextSharp库实现各种功能,如添加文本、图像、表格以及复杂的布局。下面将详细介绍如何使用iTextSharp实现这些功能。 1. **创建PDF文档** - 首先,你需要...

    使用iText-2.0.8将Html转换为pdf,带图片功能

    iText是一款广泛使用的Java库,专门用于创建和编辑PDF文档。在版本2.0.8中,它提供了将HTML转换为PDF的功能,这对于从网页内容生成打印版或者提供离线阅读材料非常有用。这个过程涉及到多个步骤和技术,下面将详细...

    java中itext生成pdf

    本篇将详细介绍如何在Java中使用Itext库来生成PDF文件。 首先,我们需要了解Itext库的基本概念。Itext是一个基于Java的PDF库,它提供了丰富的API来处理PDF文档,包括创建新的PDF文档、添加文本、图像、表格、链接、...

    java生成PDF文件

    2. **表格和列表**:iText提供` PdfPTable`类来创建表格,并且可以对单元格进行格式化。 3. **图像处理**:使用`Image`类可以插入JPEG、PNG等格式的图片。 4. **链接和超文本**:可以创建内部和外部链接,以及书签。...

    Java 生成PDF工具类 免费版

    4. **创建表格**:`PdfPTable`类允许创建具有多个行和列的表格。每个单元格由` PdfPCell`对象表示,可以自定义单元格的样式。 5. **链接与动作**:使用`Action`类可以创建超链接,如跳转到其他页面、打开URL等。 6...

    利用itext操作pdf从数据库导出大量数据

    在处理大量数据时,我们可能需要创建表格来展示信息,iText提供了`PdfPTable`类来实现这一功能。 步骤1:引入依赖 在Java项目中,我们需要将iText相关的jar包引入到项目构建路径中。在给定的压缩包中,应包含iText...

Global site tag (gtag.js) - Google Analytics