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

3、获取Excel文件路径转pdf-复杂

/**
* 将指定路径excel转换为pdf
*
* @param pdfPath pdf输出路径
* @param excelPath excel路径
* @param startTime 开始时间
* @param endTime 结束时间
* @param title 标题
* @param bill 总金额
* @param duration 总充电时长
* @param degrees 总用电度数
* @throws IOException
* @throws DocumentException
*/
public static void excelToPdfUseRecord(String pdfPath,String excelPath,String startTime, String endTime,String title,
String bill,String duration,String degrees) throws IOException {
Document document=null;
Workbook workbook=null;
InputStream inputStream=null;
PdfWriter pw=null;
try{
// 读取excel
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, 8,Font.NORMAL);
// 创建pdf
document=new Document(PageSize.A4);
// 写输出路径
pw=PdfWriter.getInstance(document,new FileOutputStream(pdfPath));
// 打开文档
document.open();
// 添加标题
Paragraph paragraphTitle = new Paragraph();
paragraphTitle.setAlignment(Element.ALIGN_CENTER);
paragraphTitle.add(new Phrase(title,new Font(bfChinese, 20,Font.NORMAL)));
document.add(paragraphTitle);

// 换行
document.add(new Paragraph("\n"));

// 次标题
// 第一个单元格居左显示
PdfPTable subTitle = new PdfPTable(1);
subTitle.setWidthPercentage(85);
// 第一个单元格内容居右显示
PdfPCell cellRight = new PdfPCell(new Phrase(startTime+ MessageUtils.message("record.export.pdf.subTitle")+endTime,fontChinese));
cellRight.setHorizontalAlignment(PdfPCell.ALIGN_RIGHT); // 设置内容居右显示
cellRight.setBorder(PdfPCell.NO_BORDER); // 设置无边框
subTitle.addCell(cellRight);

// 将表格添加到文档中
document.add(subTitle);
// 遍历工作表中的所有行和单元格,并将其添加到PDF文档中
convertWorkBookToPdf(workbook,document,fontChinese);


// 合计
// 居左显示
PdfPTable hjTitle = new PdfPTable(4);
subTitle.setWidthPercentage(85);
PdfPCell hjCellLeft = new PdfPCell(new Phrase(MessageUtils.message("record.export.pdf.hj"),fontChinese));
// 设置无边框
hjCellLeft.setBorder(PdfPCell.NO_BORDER);
hjTitle.addCell(hjCellLeft);
// 总时长
PdfPCell durationCell = new PdfPCell(new Phrase(MessageUtils.message("record.export.pdf.sumDuration")+duration,fontChinese));
// 设置内容居中显示
durationCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
// 设置无边框
durationCell.setBorder(PdfPCell.NO_BORDER);
hjTitle.addCell(durationCell);
// 总费用
PdfPCell billCell = new PdfPCell(new Phrase(MessageUtils.message("record.export.pdf.sumBill")+bill,fontChinese));
// 设置内容居中显示
billCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
// 设置无边框
billCell.setBorder(PdfPCell.NO_BORDER);
hjTitle.addCell(billCell);
// 总度数
PdfPCell degreesCell = new PdfPCell(new Phrase(MessageUtils.message("record.export.pdf.sumDegrees")+degrees,fontChinese));
// 设置内容居中显示
degreesCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
// 设置无边框
degreesCell.setBorder(PdfPCell.NO_BORDER);
hjTitle.addCell(degreesCell);

// 将表格添加到文档中
document.add(hjTitle);

}catch (Exception e){
e.printStackTrace();
}finally {
inputStream.close();
workbook.close();
document.close();
pw.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);
// 表格总宽度
myTable.setWidthPercentage(85);
// 每个单元格宽度
myTable.setWidths(new float[]{1f, 1.5f, 1.5f,1.5f,1f,1f,1f});

// 遍历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) {
// 值
String cellValue=getCellValue(cell);
if(cellValue.contains("\n")){
cellValue=""+cellValue;
}
tableCell=new PdfPCell(new Phrase(cellValue,fontChinese));
// 设置内容居中显示
tableCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
myTable.addCell(tableCell);
}
}
}
}
document.add(myTable);
}catch (Exception e){
e.printStackTrace();
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

突然发现一个很炸裂的平台!

平时小孟会开发很多的项目&#xff0c;很多项目不仅开发的功能比较齐全&#xff0c;而且效果比较炸裂。 今天给大家介绍一个我常用的平台&#xff0c;因含低代码平台&#xff0c;开发相当的快。 1&#xff0c;什么是低代码 低代码包括两种&#xff0c;一种低代码&#xff0c;…

Java中的常用类(三)

一、正则表达式 正则表达式 regex&#xff0c;全称Regular Expression。正则表达式是一种规则&#xff08;模式&#xff09;匹配语法 可以使用一些正则表达式中的特殊符号来定义一种规则&#xff0c;然后用此规则匹配某个字符&#xff0c;如果字符串与规则匹配则返回true&…

【Docker1】Docker镜像和容器基本操作

Docker基本管理一、Docker概述1、为什么要用到容器&#xff1f;2、Docker是什么&#xff1f;3、Docker的设计宗旨4、容器的优点5、Docker与虚拟机的区别6、Docker的三大核心概念 二、安装Docker1、yum安装2、二进制安装 三、Docker镜像创建与操作1、Docker 镜像操作1.1 搜索镜像…

【JavaEE进阶】Spring中事务的实现

文章目录 &#x1f343;前言&#x1f334;事务简介&#x1f6a9; 什么是事务?&#x1f6a9;为什么需要事务?&#x1f6a9;事务的操作 &#x1f340;Spring 中事务的实现&#x1f6a9;Spring 编程式事务&#x1f6a9;Spring声明式事务Transactional&#x1f6a9;Transactional…

数字人民币钱包(二)

文章目录 前言一 什么是数字人民币钱包&#xff1f;二 怎么开通数字人民币钱包&#xff1f;三 数字人民币钱包有哪些&#xff1f;四 数字人民币钱包升级 前言 上篇文章梳理了什么是数字人民币&#xff0c;及其特征和相关概念&#xff0c;这篇文章来整理下数字人民币钱包。数字人…

selenium常用操作汇总

本文总结使用selenium进行web/UI自动化时&#xff0c;会用到的一些常用操作。 定位元素 driver.find_element_by_xpath()#1、绝对路径 2、元素属性 3、层级和属性结合 4、使用逻辑运算符 driver.find_element_by_id()#根据id定位&#xff0c;HTML规定id属性在HTML文档中必须是唯…

App拉起微信小程序参考文章

App拉起微信小程序参考文章h5页面跳转小程序-----明文URL Scheme_weixin://dl/business/?appid*appid*&path*path*&qu-CSDN博客文章浏览阅读561次&#xff0c;点赞16次&#xff0c;收藏5次。仅需两步&#xff0c;就能实现h5跳转小程序&#xff0c;明文 URL Scheme&…

vue2 vue-cli vue-router vuex

Vue2 插值表达式 利用表达式进行插值渲染&#xff0c;将数据渲染到页面中。 语法&#xff1a;{{ 表达式 }} PS&#xff1a; 使用的数据要存在支持的是表达式&#xff0c;不是语句 if、for不能在标签属性中使用{{ }} v-show和v-if v-show底层原理&#xff1a;切换css的dis…

SRC学习-成为赏金猎人

你是否对漏洞挖掘充满好奇&#xff1f;零基础或有基础但想更进一步&#xff1f;想赚取可观的漏洞赏金让自己有更大的自由度&#xff1f; 那么&#xff0c;不妨了解下土拨鼠的安全屋 这或许也是你成为漏洞赏金猎人的第一课。 逻辑漏洞挖掘手法与创新思路&#xff0c;带你突破…

@EnableWebMvc介绍和使用详细demo

EnableWebMvc是什么 EnableWebMvc 是 Spring MVC 中的一个注解&#xff0c;它用于启用 Spring MVC 框架的基本功能&#xff0c;以便你可以使用 Spring MVC 提供的特性来处理 Web 请求。 通常情况下&#xff0c;在基于 Spring Boot 的应用中&#xff0c;并不需要显式地使用 Ena…

GC--垃圾回收

目录 垃圾回收概念 什么是垃圾? 垃圾回收机制什么时候会进行GC&#xff1f;&#xff1f; 应该关心垃圾回收那些哪些区域的回收 垃圾回收相关算法 垃圾回收算法&#xff1a;[标记阶段、回收阶段] 垃圾标记阶段 标记阶段的目的 引用计数算法&#xff08;目前没有在使用&…

实现类似 Word 协同编辑--Canvas-Editor

前言 对于word的协同编辑&#xff0c;已经构思很久了&#xff0c;但是没有找到合适的插件。今天推荐基于canvas/svg 的富文本编辑器 canvas-editor&#xff0c;能实现类似word的基础功能&#xff0c;如果后续有更好的&#xff0c;也会及时更新。 Canvas-Editor效果图: 官方文…

FFmpeg--AAC音频解码流程

文章目录 AAC 组成函数分析读aac帧写aac帧aac的head参数设置 运行结果 AAC 组成 AAC音频格式&#xff1a;是⼀种由MPEG-4标准定义的有损⾳频压缩格式 ADTS:是AAC音频的传输流格式 AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成 每⼀帧的ADTS的头⽂件都包含了⾳频的采…

llama-index调用qwen大模型实现RAG

背景 llama-index在实现RAG方案的时候多是用的llama等英文大模型&#xff0c;对于国内的诸多模型案例较少&#xff0c;本次将使用qwen大模型实现llama-index的RAG方案。 环境配置 &#xff08;1&#xff09;pip包 llamaindex需要预装很多包&#xff0c;这里先把我成功的案例…

计算机网络——概述

计算机网络——概述 计算机网络的定义互连网&#xff08;internet&#xff09;互联网&#xff08;Internet&#xff09;互联网基础结构发展的三个阶段第一个阶段——APPANET第二阶段——商业化和三级架构第三阶段——全球范围多层次的ISP结构 ISP的作用终端互联网的组成边缘部分…

Python 映射函数map()详解

一、映射函数定义 它用于对容器中的元素进行映射&#xff08;或变换&#xff09; 二、映射函数语法 map(function, iterable) function&#xff1a;一个提供变换规则的函数&#xff0c;返回变换之后的元素iterable&#xff1a;一个或多个序列&#xff08;可迭代对象&#xff09…

新零售SaaS架构:订单履约系统架构设计(万字图文总结)

什么是订单履约系统&#xff1f; 订单履约系统用来管理从接收客户订单到将商品送达客户手中的全过程。 它连接了上游交易&#xff08;客户在销售平台下单环&#xff09;和下游仓储配送&#xff08;如库存管理、物流配送&#xff09;&#xff0c;确保信息流顺畅、操作协同&…

【ElasticSearch】es索引、映射、文档基本操作复杂查询

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的ElasticSearch专栏&#xff0c;本篇博客由B战尚硅谷的ElasticSearch视频总结而来&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ &#x1f306; 内容速览 1 es数据格…

【node版本问题】运行项目报错 PostCSS received undefined instead of CSS string

最近该项目没有做任何修改&#xff0c;今天运行突然跑不起来报错了 PostCSS received undefined instead of CSS string 【原因】突然想起来期间有换过 node 版本为 16.17.1 【解决】将 node 版本换回之前的 14.18.0 就可以了

vue3中基于路由层面和组件层面进行用户角色及权限控制的方法解析

文章目录 一、权限控制二、路由层面控制三、组件层面控制1、使用自定义指令2、使用方法控制3、封装一个权限控制组件来实现组件层面控制权限3.1、组件页面 Authority.vue3.2、使用页面 app.vue3.3、效果预览 一、权限控制 随着前端技术的不断发展&#xff0c;越来越多的前端框…