poi生成Workbook转成pdf(java实现excel转pdf)
这里excel转pdf实现的思想是:
先用poi生成workbook 然后转为pdf格式文件
controller:
CommenConstant.FILE_TYPE fileTypeEnum = CommenConstant.FILE_TYPE.getFileTypeEnum(fileType);if (null == fileTypeEnum) {return failure("文件类型不符合规范(pdf、excel)");}
XSSFWorkbook backBook;//数据库查出故障数据List<FaultRegisterVO> faultRegisterVOS = statisticsService.selectFaultRegisterMsg(date,timeType);//将数据生成workbookbackBook = statisticsService.generateFaultRegisterMsgExcel(faultRegisterVOS,date,timeType);OutputStream osOut = response.getOutputStream();switch (fileTypeEnum) {case EXCLE:response.setHeader("Content-disposition", "attachment;filename="+ "故障排名报表" +".xlsx");response.setContentType("application/vnd.ms-excel;charset=utf-8");backBook.write(osOut);osOut.close();osOut.flush();break;case PDF:ExcelConvertPdf.excelConvertPdf(backBook,osOut,response);osOut.close();osOut.flush();break;default:return null;}
枚举工具类:
public enum FILE_TYPE{/*** 统计报表形式*/PDF("pdf"),EXCLE("excle");String desc;FILE_TYPE(String desc){this.desc = desc;}public static FILE_TYPE getFileTypeEnum(String desc){for(FILE_TYPE fileType:FILE_TYPE.values()){if(fileType.desc.equals(desc)){return fileType;}}return null;}}
excel转pdf工具类
import cn.hutool.core.date.DateTime;
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.HSSFCell;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.ResourceUtils;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;/*** @Author WangXinZhong* @Date 2021/12/31 17:31*/
public class ExcelConvertPdf {public static void excelConvertPdf(XSSFWorkbook workbook, OutputStream osOut, HttpServletResponse response) throws DocumentException, IOException {//设置页面大小Rectangle rectPageSize = new Rectangle(PageSize.A3);// 定义A3页面大小rectPageSize = rectPageSize.rotate(); //横版Document document = new Document(rectPageSize, -80, -80, 50, 0); //边距//字体设置/** 由于itext不支持中文,所以需要进行字体的设置,可以调用项目资源文件或者调用windows系统的中文字体,* 找到文件后,打开属性,将文件名及所在路径作为字体名即可。*///创建BaseFont对象,指明字体,编码方式,是否嵌入BaseFont bf=BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//创建Font对象,将基础字体对象,字体大小,字体风格Font font = new Font(bf, 13, Font.NORMAL);int rowNum = 0;int colNum = 0;XSSFSheet sheet = workbook.getSheetAt(0);int column = sheet.getRow(1).getLastCellNum();int row = sheet.getPhysicalNumberOfRows();System.out.println(row);//下面是找出表格中的空行和空列List nullCol = new ArrayList<>();List nullRow = new ArrayList<>();for (int j = 0; j < column; j++) {int nullColNum = 0;for (int i = 0; i < row; i++) {XSSFCell cell = sheet.getRow(i).getCell(j);if (cell == null || (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) && "".equals(cell.getStringCellValue())) {nullColNum++;}}if (nullColNum == row) {nullCol.add(j);}}for (int i = 0; i < row; i++) {int nullRowNum = 0;for (int j = 0; j < column; j++) {XSSFCell cell = sheet.getRow(i).getCell(j);if (cell == null || (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) && "".equals(cell.getStringCellValue())) {nullRowNum++;}}if (nullRowNum == column) {nullRow.add(i);}}PdfWriter writer = PdfWriter.getInstance(document,osOut);document.open();PdfPTable table = new PdfPTable(column-sheet.getRow(1).getFirstCellNum());List<CellRangeAddress> ranges = new ArrayList();int sheetMergeCount = sheet.getNumMergedRegions();System.out.println("sheetMergeCount"+sheetMergeCount);for (int i = 0; i < sheetMergeCount; i++) {CellRangeAddress range = sheet.getMergedRegion(i);ranges.add(range);}PdfPCell cell1 = null;String str = null;boolean mergeFlag = true;for (int i = sheet.getFirstRowNum(); i < row; i++) {/*if (nullRow.contains(i)) { //如果这一行是空行,这跳过这一行continue;}*/for (int j = sheet.getRow(1).getFirstCellNum(); j < column; j++) {/*if (nullCol.contains(j)) { //如果这一列是空列,则跳过这一列continue;}*/boolean flag = true;XSSFCell cell = sheet.getRow(i).getCell(j);if(null != cell) {if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {str = (int) cell.getNumericCellValue() + "";} else {str = cell.getStringCellValue();}System.out.println("i ::"+i + "j::"+j);System.out.println(str);for (CellRangeAddress range : ranges) { //合并的单元格判断和处理if (j >= range.getFirstColumn() && j <= range.getLastColumn() && i >= range.getFirstRow()&& i <= range.getLastRow()) {/*if (str == null || "".equals(str)) {flag = false;if (ranges.size()>1){mergeFlag = true;}else {mergeFlag = false;}break;}*/if(mergeFlag){rowNum = range.getLastRow() - range.getFirstRow() + 1;colNum = range.getLastColumn() - range.getFirstColumn() + 1;cell1 = mergeCell(str, font, rowNum, colNum);System.out.println("合并"+rowNum+"、"+colNum);table.addCell(cell1);flag = false;if (ranges.size()>1){mergeFlag = true;}else {mergeFlag = false;}break;}flag = false;if (ranges.size()>1){mergeFlag = true;}else {mergeFlag = false;}}}if (flag) {table.addCell(getPDFCell(str, font));}}}}document.add(table);response.setContentType("application/pdf");response.setHeader("Content-disposition", "attachment;filename="+ DateTime.now() +".pdf");document.close();writer.close();}//合并public static PdfPCell mergeCell(String str, Font font, int i, int j) {PdfPCell cell = new PdfPCell(new Paragraph(str, font));cell.setMinimumHeight(25);cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);cell.setRowspan(i);cell.setColspan(j);return cell;}//获取指定内容与字体的单元格public static PdfPCell getPDFCell(String string, Font font) {//创建单元格对象,将内容与字体放入段落中作为单元格内容PdfPCell cell = new PdfPCell(new Paragraph(string, font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//设置最小单元格高度cell.setMinimumHeight(25);return cell;}
}
poi生成Workbook转成pdf(java实现excel转pdf)相关推荐
- java操作Excel、PDF文件
java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...
- Java 将 Excel 转换为 PDF 文件
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情 今天这是篇粗糙的文章,文字也较少,整理了个Java将Excel 转换为 PDF 文件的工具类.(还比较 ...
- 利用java实现excel转pdf文件
在有些需求当中我们需要抓取字段并且填充到excel表格里面,最后将excel表格转换成pdf格式进行输出,我第一次接触这个需求时,碰到几个比较棘手的问题,现在一一列出并且提供解决方案. 1:excel ...
- pdf java 开源_Java开源PDF类库 分类列表
iText iText是一个能够快速产生PDF文件的java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用 ...
- Java操作excel转pdf工具类
工作中遇到excel文件转pdf的需求,总结了一下通过java的实现方法: 一.准备工作: 1.下载aspose-cells的jar包 由于Aspose是不能通过maven远程坐标引入的,因为在阿里云 ...
- Java实现Excel转pdf
1.首先在pom.xml引入以下仓库地址,因为该jar包只能在此仓库下载 <repositories><repository><id>com.e-iceblue&l ...
- java生成sm2证书_(转载)Java使用IText实现PDF签章
前文讲到了如何使用Adobe的PDF工具软件进行电子印章应用.在实际应用中还有一种情形就是需要将电子印章功能集成在我们开发的系统里,这里就要用到一些PDF的二次开发库了.做过相关开发的同学应该知道常用 ...
- java实现excel转pdf文件
引入依赖pom.xml <dependency><groupId>com.aspose.cells</groupId><artifactId>aspos ...
- Java 将Excel转为PDF(基于Spire.Cloud.SDK for Java)
Spire.Cloud.SDK for Java提供GeneralApi接口和WorkbookApi接口,支持将本地Excel和云端Excel文档转换为ODS, PDF, XPS, PCL, PS等格 ...
- pdf java解析_JAVA解析PDF内容
不废话,很简单,超实用.表格,图片都可以解析, 1下载**Spire.Pdf.jar**, 点击此处下载jar包 2代码 public static void main(String[] args) ...
最新文章
- Java 自带性能监控工具:监视和管理控制台jconsole的使用
- 架构漫谈读后感之软件架构师如何工作
- 1032 Sharing (25 分) 【难度: 一般 / 知识点: 链表】
- mysql jdbc allow_mysql的jdbc.url携带allowMultiQueries=true参数的作用及其原理
- Redis操作hash类型
- dial up network
- Android WindowManager和WindowManager.LayoutParams的使用以及实现悬浮窗口的方法
- error: Microsoft Visual C++ 14.0 is required.
- OJ1063: 最大公约与最小公倍(C语言)
- 系统动力学模型_蓝谷学术动态|典型海洋生态系统动力学模型构建、应用及发展入选2020年经典中国国际出版工程...
- 输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m 转载
- Ubuntu 18.04 rc.local systemd设置
- pku1631 Bridging signals
- fn:startsWith()函数
- android程序连接网络出现android.os.NetworkOnMainThreadEx
- excel打不开html格式的文件,excel文件打不开提示格式无效怎么解决【图文】
- 腾讯视频显示网络连接服务器失败,腾讯视频网络连接异常
- HTML5中fillStyle和fillRect的先后顺序的理解
- button run clicked becomes grey Android studio运行按钮变灰
- 真实骑手数据:73万大学毕业生在送外卖
热门文章
- linux cad 安装教程视频,在Deepin Linux系统中安装Freecad后再安装assembly2插件的方法...
- ubutu 识别android手机
- RStudio 开发环境配置
- 洛谷P3835 【模板】可持久化平衡树(FHQ Treap)
- 使用GeoServer发布Shapfile数据
- 甘特图控件VARCHART XGantt,解读活动组布局的“单独行中的节点”选项!
- Git版本库深入剖析
- Flutter 闪屏页实现
- 百度应用开放平台简介
- 关于GX WORKS2中M8002、M8012、M8013无法使用的问题