文章目录
java代码SXSSFWorkbook转pdf
本文以SXSSFWorkbook导出excel为例,其他的例如EasyExcel的同理
1. 导入jar包spire.xls
maven依赖,spire.xls.free是免费的,但据说有限制,只能单个工作簿转换
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls.free</artifactId>
<version>3.9.1</version>
</dependency>
需要一个远程仓库才能下载下来
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
2. SXSSFWorkbook导入excel
示例代码:
// new 工作簿
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(500);
// 创建sheet
SXSSFSheet sheet = sxssfWorkbook.createSheet();
// sheet名称
sxssfWorkbook.setSheetName(0, "sheet1");
// 创建行
SXSSFRow row0 = sheet.createRow(0);
// 行高
row0.setHeight((short)(23.25 * 20));
// 字体
Font titleFont = sxssfWorkbook.createFont();
// 字体名
titleFont.setFontName("宋体");
// 字体大小
titleFont.setFontHeightInPoints((short)14);
// 是否加粗
titleFont.setBold(true);
// 创建样式
CellStyle titleStyle = sxssfWorkbook.createCellStyle();
// 设置样式的字体
titleStyle.setFont(titleFont);
// 水平居中
titleStyle.setAlignment(HorizontalAlignment.CENTER);
// 垂直居中
titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 左边框 可以设置颜色
titleStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
// 左边框线条
titleStyle.setBorderLeft(BorderStyle.THIN);
// 上边框
titleStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
// 上边框线条
titleStyle.setBorderTop(BorderStyle.THIN);
// 右边框
titleStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
// 右边框线条
titleStyle.setBorderRight(BorderStyle.THIN);
// 下边框
titleStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
// 下边框线条
titleStyle.setBorderBottom(BorderStyle.THIN);
// 创建列
SXSSFCell cell0 = row0.createCell(0);
// 设置该列的样式
cell0.setCellStyle(titleStyle);
// 设置单元格的值
cell0.setCellValue("value");
// 合并单元格
CellRangeAddress cellAddresses = new CellRangeAddress(0, 0, 1, 2);
sheet.addMergedRegion(cellAddresses);
// 自适应列宽
int maxColumn = sheet.getRow(0).getPhysicalNumberOfCells();
sheet.trackAllColumnsForAutoSizing();
for (int i = 0; i < maxColumn; i++) {
sheet.autoSizeColumn(i, true);
}
3. SXSSFWorkbook转inputstream
/**
* SXSSFWorkbook 转输入流
* @param workbook
* @return
* @throws IOException
*/
public static InputStream workbookConvertorStream(SXSSFWorkbook workbook) throws IOException {
InputStream in = null;
//临时缓冲区
ByteArrayOutputStream out = new ByteArrayOutputStream();
//创建临时文件
workbook.write(out);
byte [] bookByteAry = out.toByteArray();
in = new ByteArrayInputStream(bookByteAry);
return in;
}
4.spire.xls导出pdf
/**
* 使用spire将单个sheet转成pdf
*
* @param inputFilePath Excel文件路径
* @param outputStream 导出的PDF文件路径
* @param sheetNum 导出的sheet页下标
*/
public static void partExcelToPDF(String inputFilePath, OutputStream outputStream, int sheetNum) {
//加载Excel文档
Workbook wb = new Workbook();
wb.loadFromFile(inputFilePath);
//设置字段在一页中显示全
wb.getConverterSetting().setSheetFitToPage(true);
//获取到哪一个sheet页
Worksheet sheet = wb.getWorksheets().get(sheetNum);
//调用方法保存为PDF格式
sheet.saveToPdfStream(outputStream);
}
/**
* 使用spire将单个sheet转成pdf
* @param inputStream 输入流
* @param outputStream 输出流
* @param sheetNum 导出的sheet页下标
*/
public static void partExcelToPDF(InputStream inputStream, OutputStream outputStream, int sheetNum) {
//加载Excel文档
Workbook wb = new Workbook();
wb.loadFromStream(inputStream);
//设置字段在一页中显示全
wb.getConverterSetting().setSheetFitToPage(true);
//获取到哪一个sheet页
Worksheet sheet = wb.getWorksheets().get(sheetNum);
//调用方法保存为PDF格式
sheet.saveToPdfStream(outputStream);
}
/**
* 使用spire将单个sheet转成pdf
* @param inputFilePath Excel文件路径
* @param fileOutOut 输出流
* @param sheetNum 导出的sheet页下标
*/
public static void partExcelToPDF(String inputFilePath, String fileOutOut, int sheetNum) {
//加载Excel文档
Workbook wb = new Workbook();
wb.loadFromFile(inputFilePath);
//设置字段在一页中显示全
wb.getConverterSetting().setSheetFitToPage(true);
//获取到哪一个sheet页
Worksheet sheet = wb.getWorksheets().get(sheetNum);
//调用方法保存为PDF格式
sheet.saveToPdf(fileOutOut);
}
5. linux安装字体
在linux环境下会因为缺少字体,导出为中文会出现乱码和小方块,官方文档:spire.xls官方文档
解决乱码方式:
- windows上没有问题是因为windows上本身有安装字体,目录在C:\Windows\Fonts
找到SimSun字体上传到linux上/usr/share/fonts/ - cd 到/usr/share/fonts/目录下
cd /usr/share/fonts/
- 安装字体
mkfontscale //字体扩展
mkfontdir //新增字体目录
fc-cache-fv //刷新缓存
如果出现mkfontscale不存在的报错,执行
yum install mkfontscale
安装
- 查询安装的字体
查看系统中的字体:
指令:fc-list
查看系统中的中文字体:
指令:fc-list:lang=zh
如果报错找不到同理,通过
yum install fontconfig
安装