excel转pdf

本文介绍了如何在Java中利用Spire.XLS库将SXSSFWorkbook对象转换为PDF文件,包括导入Maven依赖,创建并设置Excel工作簿样式,转换为InputStream,以及在Linux环境下处理字体问题以避免乱码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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官方文档
spire.xls
解决乱码方式:

  1. windows上没有问题是因为windows上本身有安装字体,目录在C:\Windows\Fonts
    windows本地字体
    找到SimSun字体上传到linux上/usr/share/fonts/
  2. cd 到/usr/share/fonts/目录下
cd /usr/share/fonts/
  1. 安装字体
mkfontscale //字体扩展

mkfontdir //新增字体目录

fc-cache-fv //刷新缓存

如果出现mkfontscale不存在的报错,执行

yum install mkfontscale

安装

  1. 查询安装的字体
查看系统中的字体:

指令:fc-list

查看系统中的中文字体:

指令:fc-list:lang=zh

如果报错找不到同理,通过

yum install fontconfig

安装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值