Excel转pdf

1、excel-内存值--Workbook 转pdf

/**

* excel To pdf

*

* @param outPath 输出路径

* @param workbook excel-内存值

* @throws IOException

*/

public static void excelToPdf(String outPath,Workbook workbook) throws IOException, DocumentException {

Document document=null;

try{

// excel

Sheet sheet = workbook.getSheetAt(0);

//设置中文

BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",

BaseFont.NOT_EMBEDDED);

//普通字体

Font fontChinese = new Font(bfChinese, 12,Font.NORMAL);

// 创建pdf

document=new Document(PageSize.A4);

// 写输出路径

PdfWriter.getInstance(document,new FileOutputStream(outPath));

// 打开文档

document.open();

// 转换

convertSheetToPdf(sheet,document,fontChinese);

}catch (Exception e){

e.printStackTrace();

}finally {

document.close();

}

}
/**

* 循环值

*

* @param sheet excel-sheet

* @param document pdf对象

* @param fontChinese 字体

*/

private static void convertSheetToPdf(Sheet sheet, Document document,Font fontChinese) {

try {

// 获取excel总列数

int totalCol = sheet.getRow(0).getPhysicalNumberOfCells();

// 准备遍历excel

Iterator<Row> rowIterator = sheet.iterator();

// 在pdf中创建一个表格

PdfPTable myTable = new PdfPTable(totalCol);

// 遍历excel, 将数据输出到pdf的表格中

PdfPCell tableCell = null;

while(rowIterator.hasNext()) {

Row row = rowIterator.next();

Iterator<Cell> cellIterator = row.cellIterator();

while(cellIterator.hasNext()) {

Cell cell = cellIterator.next();

tableCell=new PdfPCell(new Phrase(getCellValue(cell),fontChinese));

myTable.addCell(tableCell);

}

}

document.add(myTable);

} catch (DocumentException e) {

e.printStackTrace();

}

}

/**

* cell-值类型转换

*

* @param cell 单元格-列

* @return

*/

private static String getCellValue(Cell cell) {

if(cell.getCellType() == CellType.STRING){

return cell.getStringCellValue();

}else if(cell.getCellType() == CellType.NUMERIC){

return String.valueOf(cell.getNumericCellValue());

}else{

return "";

}

}

2、获取Excel文件路径转pdf

/**

* 将指定路径excel转换为pdf

*

* @param pdfPath pdf输出路径

* @param excelPath excel路径

* @throws IOException

* @throws DocumentException

*/

public static void excelToPdf(String pdfPath,String excelPath) throws IOException {

Document document=null;

Workbook workbook=null;

try{

// 读取excel

InputStream inputStream = new FileInputStream(excelPath);

workbook = new XSSFWorkbook(inputStream);

//设置中文

BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",

BaseFont.NOT_EMBEDDED);

//普通字体

Font fontChinese = new Font(bfChinese, 12,Font.NORMAL);

// 创建pdf

document=new Document(PageSize.A4);

// 写输出路径

PdfWriter.getInstance(document,new FileOutputStream(pdfPath));

// 打开文档

document.open();

// 遍历工作表中的所有行和单元格,并将其添加到PDF文档中

convertWorkBookToPdf(workbook,document,fontChinese);

}catch (Exception e){

e.printStackTrace();

}finally {

document.close();

workbook.close();

}

}

/**

* 遍历工作表中的所有行和单元格,并将其添加到PDF文档中

*

* @param workbook excel

* @param document pdf

* @param fontChinese 字体

*/

private static void convertWorkBookToPdf(Workbook workbook, Document document,Font fontChinese){

try{

Sheet sheet = workbook.getSheetAt(0);

// 获取excel总列数

int totalCol = sheet.getRow(0).getPhysicalNumberOfCells();

// 在pdf中创建一个表格

PdfPTable myTable = new PdfPTable(totalCol);

// 遍历excel, 将数据输出到pdf的表格中

PdfPCell tableCell = null;

for (int j = 0; j <= sheet.getLastRowNum(); j++) {

// 行

Row row = sheet.getRow(j);

if (row != null) {

for (int k = 0; k < row.getLastCellNum(); k++) {

// 列

Cell cell = row.getCell(k);

if (cell != null) {

// 值

tableCell=new PdfPCell(new Phrase(getCellValue(cell),fontChinese));

myTable.addCell(tableCell);

}

}

}

}

document.add(myTable);

}catch (Exception e){

e.printStackTrace();

}

}

/**

* cell-值类型转换

*

* @param cell 单元格-列

* @return

*/

private static String getCellValue(Cell cell) {

if(cell.getCellType() == CellType.STRING){

return cell.getStringCellValue();

}else if(cell.getCellType() == CellType.NUMERIC){

return String.valueOf(cell.getNumericCellValue());

}else{

return "";

}

}

相关推荐
SXJR28 分钟前
Spring前置准备(七)——DefaultListableBeanFactory
java·spring boot·后端·spring·源码·spring源码·java开发
心态特好1 小时前
详解WebSocket及其妙用
java·python·websocket·网络协议
Haooog2 小时前
98.验证二叉搜索树(二叉树算法题)
java·数据结构·算法·leetcode·二叉树
武子康2 小时前
Java-143 深入浅出 MongoDB NoSQL:MongoDB、Redis、HBase、Neo4j应用场景与对比
java·数据库·redis·mongodb·性能优化·nosql·hbase
jackaroo20203 小时前
后端_基于注解实现的请求限流
java
道可到3 小时前
百度面试真题 Java 面试通关笔记 04 |JMM 与 Happens-Before并发正确性的基石(面试可复述版)
java·后端·面试
飞快的蜗牛3 小时前
利用linux系统自带的cron 定时备份数据库,不需要写代码了
java·docker
聪明的笨猪猪4 小时前
Java Spring “IOC + DI”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
ThisIsMirror4 小时前
CompletableFuture并行任务超时处理模板
java·windows·python
珹洺5 小时前
Java-Spring入门指南(二十一)Thymeleaf 视图解析器
java·开发语言·spring