package com.guoren.platform.utils;
import com.itextpdf.text.*;
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 org.apache.poi.hssf.usermodel.XSSFSheet;
import org.apache.poi.hssf.usermodel.XSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.*;
import java.util.Iterator;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Excel2Pdf {
// public static HSSFWorkbook wb = null;
public static void main(String[] args) {
//controller中只需将生成的HSSFWorkbook对象传进来就可以了,下面可省略
XSSFWorkbook wb = null;
try {
File file = new File("G:\\//0908.xlsx");
FileInputStream inputStream=new FileInputStream(file);//把文件读入
wb = new XSSFWorkbook(inputStream);
// InputStream inputStream = new FileInputStream(file);
// wb = new HSSFWorkbook(inputStream);
}catch (Exception e){
System.out.printf("生成wb时报错");
}
//生成两个压缩文件
File[] files = new File[2];
files[0] = excelTempFile(wb,"汇rerwrewrewrw率");
files[1] = excel2Pdf(wb,"汇率wwwwwwww",createFont("C:\\Windows\\Fonts\\STKAITI.TTF"));
//测试输出zip
File zip = new File("G:\\测试.zip");
//服务器只需要用zip临时文件即可
// File zip = null;
// try {
// zip = File.createTempFile("汇率", ".zip");
// } catch (IOException e) {
// e.printStackTrace();
// }
//输出压缩文件
zipFiles(files,zip);
}
//pdfName不包过.pdf后缀
public static File excelTempFile(HSSFWorkbook wb, String excelName) {
try {
//创造临时pdf文件对象
File excelTempFile = File.createTempFile(excelName, ".xlsx");
FileOutputStream fileOutputStream = new FileOutputStream(excelTempFile);
wb.write(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
return excelTempFile;
}catch (Exception e){
e.printStackTrace();
System.out.printf("创建excel临时文件出错");
return null;
}
}
public static Font createFont(String fontPath){
try {
BaseFont bf = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font font = new Font(bf, 10f, Font.NORMAL, BaseColor.BLACK);
return font;
}catch (Exception e){
e.printStackTrace();
System.out.printf("找不到字体文件");
return null;
}
}
public static File excel2Pdf(HSSFWorkbook wb,String pdfName, Font usedFont){
try {
File pdfTempFile = File.createTempFile(pdfName, ".pdf");
HSSFSheet my_worksheet = wb.getSheetAt(0);
//获取excel总列数
int totalCol = my_worksheet.getRow(0).getPhysicalNumberOfCells();
//准备遍历excel
Iterator<Row> rowIterator = my_worksheet.iterator();
//生成一个pdf
Document iText_xls_2_pdf = new Document();
PdfWriter.getInstance(iText_xls_2_pdf, new FileOutputStream(pdfTempFile));
iText_xls_2_pdf.open();
//在pdf中创建一个表格
PdfPTable my_table = new PdfPTable(totalCol);
//遍历excel, 将数据输出到pdf的表格中
PdfPCell table_cell = null;
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
table_cell = new PdfPCell(new Phrase(cell.getStringCellValue(), usedFont));
my_table.addCell(table_cell);
}
}
iText_xls_2_pdf.add(my_table);
iText_xls_2_pdf.close();
return pdfTempFile;
}catch (Exception e){
e.printStackTrace();
System.out.printf("生成pdf失败");
return null;
}
}
//生成压缩包并输出
public static void zipFiles(File[] srcFiles, File zipFile) {
// 判断压缩后的文件存在不,不存在则创建
if (!zipFile.exists()) {
try {
zipFile.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
// 创建 FileOutputStream 对象
FileOutputStream fileOutputStream = null;
// 创建 ZipOutputStream
ZipOutputStream zipOutputStream = null;
// 创建 FileInputStream 对象
FileInputStream fileInputStream = null;
try {
fileOutputStream = new FileOutputStream(zipFile);// 实例化 ZipOutputStream 对象
zipOutputStream = new ZipOutputStream(fileOutputStream);
// 创建 ZipEntry 对象
ZipEntry zipEntry = null;
// 遍历源文件数组
for (int i = 0; i < srcFiles.length; i++){// 将源文件数组中的当前文件读入 FileInputStream 流中
fileInputStream = new FileInputStream(srcFiles[i]);
// 实例化 ZipEntry 对象,源文件数组中的当前文件;
zipEntry = new ZipEntry(srcFiles[i].getName());
zipOutputStream.putNextEntry(zipEntry);
// 该变量记录每次真正读的字节个数
int len;
// 定义每次读取的字节数组
byte[] buffer = new byte[1024];
while ((len = fileInputStream.read(buffer)) > 0) {
zipOutputStream.write(buffer, 0, len);
}
}
zipOutputStream.closeEntry();
zipOutputStream.close();
fileInputStream.close();
fileOutputStream.flush();
fileOutputStream.close();
} catch(Exception a){
a.printStackTrace();
}
}
//将Excel保存为PDF
// workbook.saveToFile("ToPDF.pdf",FileFormat.PDF);
}
excel转pdf同时压缩excel和pdf生成一个压缩包
最新推荐文章于 2024-09-15 19:46:31 发布