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

}

}

相关推荐
SimonKing1 小时前
JetBrains 用户狂喜!这个 AI 插件让 IDE 原地进化成「智能编码助手」
java·后端·程序员
狂奔小菜鸡1 小时前
Day39 | Java中更灵活的锁ReentrantLock
java·后端·java ee
NE_STOP14 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
后端AI实验室19 小时前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
程序员清风21 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme21 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
Be_Better21 小时前
学会与虚拟机对话---ASM
java
开源之眼1 天前
《github star 加星 Taimili.com 艾米莉 》为什么Java里面,Service 层不直接返回 Result 对象?
java·后端·github
Maori3161 天前
放弃 SDKMAN!在 Garuda Linux + Fish 环境下的优雅 Java 管理指南
java
用户908324602731 天前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot