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

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; 
} 


} 


 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,使用iTextPdfPTable将Excel换为PDF的步骤如下: 1. 添加iText库依赖 在您的Java项目中,您需要添加iText库的依赖。您可以在iText官网上下载iText的jar包,然后将其添加到项目的classpath中。 2. 使用POI库读取Excel文件 使用POI库读取Excel文件内容,并将其存储在Java程序中。以下是一个示例代码: ```java FileInputStream inputStream = new FileInputStream(new File("example.xlsx")); Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); Iterator<Row> iterator = sheet.iterator(); ``` 3. 创建PDF文件 使用iText库创建一个新的PDF文件,并设置页面大小、边距等。以下是创建PDF文件的示例代码: ```java Document pdfDoc = new Document(PageSize.A4, 50, 50, 50, 50); PdfWriter.getInstance(pdfDoc, new FileOutputStream(new File("example.pdf"))); pdfDoc.open(); ``` 4. 将Excel表格换为PDF表格 使用iTextPdfPTable创建一个新的PDF表格,并将Excel表格中的内容添加到PDF表格中。以下是将Excel表格换为PDF表格的示例代码: ```java PdfPTable pdfTable = new PdfPTable(3); PdfPCell cell; while (iterator.hasNext()) { Row row = iterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell excelCell = cellIterator.next(); cell = new PdfPCell(new Phrase(excelCell.getStringCellValue())); pdfTable.addCell(cell); } } pdfDoc.add(pdfTable); ``` 5. 关闭PDF文件 使用pdfDoc.close()方法关闭PDF文件完整的示例代码如下: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; public class ExcelToPdf { public static void main(String[] args) throws IOException { FileInputStream inputStream = new FileInputStream(new File("example.xlsx")); Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); Iterator<Row> iterator = sheet.iterator(); Document pdfDoc = new Document(PageSize.A4, 50, 50, 50, 50); PdfWriter.getInstance(pdfDoc, new FileOutputStream(new File("example.pdf"))); pdfDoc.open(); PdfPTable pdfTable = new PdfPTable(3); PdfPCell cell; while (iterator.hasNext()) { Row row = iterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell excelCell = cellIterator.next(); cell = new PdfPCell(new Phrase(excelCell.getStringCellValue())); pdfTable.addCell(cell); } } pdfDoc.add(pdfTable); pdfDoc.close(); workbook.close(); inputStream.close(); } } ``` 希望这可以帮助您将Excel文件换为PDF文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值