PPT在线预览 转换为图片实现方案 Apache POI 实现时踩坑:含嵌入文件ppt转换报错 ArrayStoreException

前言

背景:最近项目需要实现PPT预览功能,以及项目APP上浏览ppt,初步方案是ppt转为图片。

实现

1、ppt转为pdf,然后pdf转为图片

该种实现,先将ppt转为pdf文件,实现方式有很多,可参考之前文章 文档在线预览,将文档转为pdf

然后实现将pdf转为图片,实现方式有很多,这里介绍其中一种, apache pdfbox ,具体如下:

maven依赖:

            <dependency>
                <groupId>org.apache.pdfbox</groupId>
                <artifactId>fontbox</artifactId>
                <version>2.0.12</version>
            </dependency>
            <dependency>
                <groupId>org.apache.pdfbox</groupId>
                <artifactId>pdfbox</artifactId>
                <version>2.0.12</version>
            </dependency>

java代码:

        try {
            int dpi = 296;
            PDDocument pdDocument = PDDocument.load(new File("pdf file path"));
            PDFRenderer renderer = new PDFRenderer(pdDocument);
            int pageCount = pdDocument.getNumberOfPages();
            /* dpi越大转换后越清晰,相对转换速度越慢 */
            for (int i = 0; i < pageCount; i++) {
                File dstFile = new File("png file path");
                BufferedImage image = renderer.renderImageWithDPI(i, dpi);
                ImageIO.write(image, "png", dstFile);
            }
        }catch (Exception e){
            e.printStackTrace();
        }

转换之后,可自行添加finally对资源进行处理 

 

2、利用apache poi直接将ppt转为图片

上述方案中,有两步实现,先转pdf,再转图片。转pdf方案中,比较靠谱快速的方法可能需要依赖外部 liberoffice 或者 openoffice. 实现ppt预览,也可通过apache poi 将ppt直接转为图片

apache poi提供丰富的office操作api,可直接通过java代码读写操作excel sheet,表格,内容等。也可以直接操作ppt slider,插入,读取内容等。

talk is cheap, show my code

maven 依赖:

            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>${appache.poi
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
使用Apache POI将Excel单元格转换图片需要以下步骤: 1. 加载Excel文件并创建工作簿对象: ``` File file = new File("path/to/excel/file.xlsx"); Workbook workbook = WorkbookFactory.create(file); ``` 2. 获取要转换图片的单元格对象: ``` Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 Row row = sheet.getRow(0); // 获取第一行 Cell cell = row.getCell(0); // 获取第一个单元格 ``` 3. 创建绘图对象并设置绘图区域: ``` Drawing drawing = sheet.createDrawingPatriarch(); ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, cell.getColumnIndex(), row.getRowNum(), cell.getColumnIndex() + 1, row.getRowNum() + 1); ``` 4. 创建图片对象并将其插入绘图对象: ``` byte[] imageBytes = // 从单元格中获取图片字节数组 int pictureIndex = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_JPEG); Picture picture = drawing.createPicture(anchor, pictureIndex); ``` 5. 将工作簿写入输出流: ``` FileOutputStream out = new FileOutputStream("path/to/output/image.jpg"); workbook.write(out); out.close(); ``` 完整代码示例: ``` File file = new File("path/to/excel/file.xlsx"); Workbook workbook = WorkbookFactory.create(file); Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 Row row = sheet.getRow(0); // 获取第一行 Cell cell = row.getCell(0); // 获取第一个单元格 Drawing drawing = sheet.createDrawingPatriarch(); ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, cell.getColumnIndex(), row.getRowNum(), cell.getColumnIndex() + 1, row.getRowNum() + 1); byte[] imageBytes = // 从单元格中获取图片字节数组 int pictureIndex = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_JPEG); Picture picture = drawing.createPicture(anchor, pictureIndex); FileOutputStream out = new FileOutputStream("path/to/output/image.jpg"); workbook.write(out); out.close(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值