Apache POI将PPT转换成图片实例代码

本文主要分享的是关于Apache POI将PPT转换成图片的相关内容,简单介绍了Apache POI,具体内容如下。

1、Apache POI 简介

Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。

可以查看官方文档 Apache POI官网

Apache POI操作PPT文档有两种方式:

1.POI-HSLF 对应的 Powerpoint ‘97(-2007) 的文件格式 – 后缀名为 .ppt
2.POI-XSLF 对应的PowerPoint 2007 OOXML 的文件格式 – 后缀名为 .pptx

2、JAR包

POI 操作office需要的jar包:

    poi-3.12.jar
    poi-ooxml-3.12.jar
    poi-ooxml-schemas-3.12.jar
    poi-scratchpad-3.12.jar
    xmlbeans-2.6.0.jar

maven方式引入:

maven 方式只需要引入两个就可以,因为他们依赖了其他几个

    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.12</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-scratchpad</artifactId>
      <version>3.12</version>
    </dependency>

3、POI-HSLF 方式

POI-HSLF 方式处理PPT以 .ppt 后缀结尾的文档。

/**
   * ppt2003 文档的转换 后缀名为.ppt
   * @param pptFile ppt文件
   * @param imgFile 图片将要保存的目录(不是文件)
   * @return
   */
public static Boolean doPPT2003toImage(File pptFile,File imgFile,List<String> list) {
	try {
		FileInputStream is = new FileInputStream(pptFile);
		SlideShow ppt = new SlideShow(is);
		//及时关闭掉 输入流
		is.close();
		Dimension pgsize = ppt.getPageSize();
		Slide[] slide = ppt.getSlides();
		for (int i = 0; i < slide.length; i++) {
			log.info("第" + i + "页。");
			TextRun[] truns = slide[i].getTextRuns();
			for (int k = 0; k < truns.length; k++) {
				RichTextRun[] rtruns = truns[k].getRichTextRuns();
				for (int l = 0; l < rtruns.length; l++) {
					// 原有的字体索引 和 字体名字
					int index = rtruns[l].getFontIndex();
					String name = rtruns[l].getFontName();
					log.info("原有的字体索引 和 字体名字: "+index+" - "+name);
					// 重新设置 字体索引 和 字体名称 是为了防止生成的图片乱码问题
					rtruns[l].setFontIndex(1);
					rtruns[l].setFontName("宋体");
				}
			}
			//根据幻灯片大小生成图片
			BufferedImage img = new BufferedImage(pgsize.width,pgsize.height, BufferedImage.TYPE_INT_RGB);
			Graphics2D graphics = img.createGraphics();
			graphics.setPaint(Color.white);
			graphics.fill(new Rectangle2D.float(0, 0, pgsize.width,pgsize.height));
			slide[i].draw(graphics);
			// 图片的保存位置
			String absolutePath = imgFile.getAbsolutePath()+"/"+ (i + 1) + ".jpeg";
			File jpegFile = new File(absolutePath);
			// 图片路径存放
			list.add((i + 1) + ".jpeg");
			// 如果图片存在,则不再生成
			if (jpegFile.exists()) {
				continue;
			}
			// 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径
			FileOutputStream out = new FileOutputStream(jpegFile);
			ImageIO.write(img, "jpeg", out);
			out.close();
		}
		log.error("PPT转换成图片 成功!");
		return true;
	}
	catch (Exception e) {
		log.error("PPT转换成图片 发生异常!", e);
	}
	return false;
}

4、POI-XSLF 方式

POI-XSLF 方式处理PPT文件以 .pptx 后缀结尾的文档。

/**
   * ppt2007文档的转换 后缀为.pptx
   * @param pptFile PPT文件
   * @param imgFile 图片将要保存的路径目录(不是文件)
   * @param list 存放文件名的 list
   * @return
   */
public static Boolean doPPT2007toImage(File pptFile,File imgFile,List<String> list) {
	FileInputStream is = null ;
	try {
		is = new FileInputStream(pptFile);
		XMLSlideShow xmlSlideShow = new XMLSlideShow(is);
		is.close();
		// 获取大小
		Dimension pgsize = xmlSlideShow.getPageSize();
		// 获取幻灯片
		XSLFSlide[] slides = xmlSlideShow.getSlides();
		for (int i = 0 ; i < slides.length ; i++) {
			// 解决乱码问题
			XSLFShape[] shapes = slides[i].getShapes();
			for (XSLFShape shape : shapes) {
				if (shape instanceof XSLFTextShape) {
					XSLFTextShape sh = (XSLFTextShape) shape;
					List<XSLFTextParagraph> textParagraphs = sh.getTextParagraphs();
					for (XSLFTextParagraph xslfTextParagraph : textParagraphs) {
						List<XSLFTextRun> textRuns = xslfTextParagraph.getTextRuns();
						for (XSLFTextRun xslfTextRun : textRuns) {
							xslfTextRun.setFontFamily("宋体");
						}
					}
				}
			}
			//根据幻灯片大小生成图片
			BufferedImage img = new BufferedImage(pgsize.width,pgsize.height, BufferedImage.TYPE_INT_RGB);
			Graphics2D graphics = img.createGraphics();
			graphics.setPaint(Color.white);
			graphics.fill(new Rectangle2D.float(0, 0, pgsize.width,pgsize.height));
			// 最核心的代码
			slides[i].draw(graphics);
			//图片将要存放的路径
			String absolutePath = imgFile.getAbsolutePath()+"/"+ (i + 1) + ".jpeg";
			File jpegFile = new File(absolutePath);
			// 图片路径存放
			list.add((i + 1) + ".jpeg");
			//如果图片存在,则不再生成
			if (jpegFile.exists()) {
				continue;
			}
			// 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径
			FileOutputStream out = new FileOutputStream(jpegFile);
			// 写入到图片中去
			ImageIO.write(img, "jpeg", out);
			out.close();
		}
		log.error("PPT转换成图片 成功!");
		return true;
	}
	catch (Exception e) {
		log.error("PPT转换成图片 发生异常!", e);
	}
	return false;
}

5、可能出现的错误

org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

出现以上错误,说明是没有对应起来使用,应该使用第二种方式来转换PPT。

有时候核心转换的时候很容易出问题,是因为POI没有做得很好,图片有时候容易失真。

// 最核心的代码
slides[i].draw(graphics);

总结

以上就是本文关于Apache POI将PPT转换成图片实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • 基于apache poi根据模板导出excel的实现方法
  • Java通过apache poi生成excel实例代码
  • 利用Java Apache POI 生成Word文档示例代码
  • java后台利用Apache poi 生成excel文档提供前台下载示例
  • java Apache poi 对word doc文件进行读写操作
  • Java使用Apache POI库读取Excel表格文档的示例
  • Java中使用Apache POI读取word文件简单示例
(0)

相关推荐

  • java后台利用Apache poi 生成excel文档提供前台下载示例

    之前在项目中会用到在Java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,访问量已经是我写的博客里第一了.于是乎我在学会用Java在后台利用Apache poi 生成excel文档提供前台下载之后就想着来写一篇姊妹篇啦. 在生成Excel文档的时候我采用了和生成Word时的不同方法,Apache poi.它是用Java编写的免费开源的跨平台的 Java API,提供API给Java程式对Microsoft Office格式档案读和

  • java Apache poi 对word doc文件进行读写操作

    使用POI读写Word doc文件 Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的.在hwpf里面我们使用HWPFDocument来表示一个word doc文档.在HWPFDocument里面有这么几个概念: Range:它表示一个范围,这个范围可以是整个文档,也可以是里面的某一小节(Section),也可以是某一个段落(Paragraph),还可以是拥有共同属性的一段文本(CharacterRun).   Section:word文档的一个小节,一个word文

  • 利用Java Apache POI 生成Word文档示例代码

    最近公司做的项目需要实现导出Word文档的功能,网上关于POI生成Word文档的例子很少,找了半天才在官网里找到个Demo,有了Demo一切就好办了. /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See

  • Java通过apache poi生成excel实例代码

    首先,jar maven 添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.15</version> </dependenc

  • Java使用Apache POI库读取Excel表格文档的示例

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 项目下载页:http://poi.apache.org/download.html Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API.用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Jav

  • 基于apache poi根据模板导出excel的实现方法

    需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.user

  • Java中使用Apache POI读取word文件简单示例

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi-3.5-beta6-20090622.jar 和 poi-scratchpad-3.5-beta6-20090622.jar 两个 jar 包即可, 而 2007 版本(.docx)就麻烦多,我说的这个麻烦不

  • Apache POI将PPT转换成图片实例代码

    本文主要分享的是关于Apache POI将PPT转换成图片的相关内容,简单介绍了Apache POI,具体内容如下. 1.Apache POI 简介 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 可以查看官方文档 Apache POI官网 Apache POI操作PPT文档有两种方式: 1.POI-HSLF 对应的 Powerpoint '97(-2007) 的文

  • android将图片转换存到数据库再从数据库读取转换成图片实现代码

    首先,我们要把图片存入到数据库中,首先要创建一个数据库, 如下所示: 复制代码 代码如下: package com.android.test; import java.io.ByteArrayOutputStream; import android.content.ContentResolver;import android.content.ContentValues;import android.content.Context;import android.database.sqlite.SQ

  • Android中布局保存成图片实例代码

    一.前言 有一个朋友问做过截屏的小功能没,自己没有做过.但是想了一下,实现的过程.实现截屏就是为了截取咱们应用中的部分布局,然后实现将保存在本地,或将其分享,或将其通过第三方的平台分享出去.自己可能是受了截屏这两个字的影响,想当然的去梳理自己的实现思路. 1:截屏,调用系统的截屏功能区实现截屏. 2:对图片进行处理:截屏是截取的手机的全屏,因为我们是需要截取我们的应用的某一部分,所以我们需要去通过剪切裁剪,去裁剪出自己想要保留的一部分(实质也就是保存布局). 3:后续也许还要处理系统截屏功能本身

  • python将文本转换成图片输出的方法

    本文实例讲述了python将文本转换成图片输出的方法.分享给大家供大家参考.具体实现方法如下: #-*- coding:utf-8 -*- from PIL import Image,ImageFont,ImageDraw text = u'欢迎访问我们,http://www.jb51.net' font = ImageFont.truetype("msyh.ttf",18) lines = [] line ='' for word in text.split(): print wor

  • C#实现把图片转换成二进制以及把二进制转换成图片的方法示例

    本文实例讲述了C#实现把图片转换成二进制以及把二进制转换成图片的方法.分享给大家供大家参考,具体如下: private void button1_Click(object sender, EventArgs e) { string path = this.textBox1.Text; byte[] imgBytesIn = SaveImage(path); ShowImgByByte(imgBytesIn); //Parameters.Add("@Photo", SqlDbType.B

  • PHP实现将base64编码字符串转换成图片示例

    本文实例讲述了PHP实现将base64编码字符串转换成图片.分享给大家供大家参考,具体如下: 步骤: 1. 获取base64文件: 复制代码 代码如下: $image="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRw

  • C#实现将PPT转换成HTML的方法

    本文是一个C#的小程序,主要实现将ppt转换成html的功能,方法很多,此处与大家分享一下,希望能对大家的项目开发起到一定的借鉴作用. 主要功能代码如下: using System; using System.Collections.Generic; using System.Text; using System.IO; using PPT = Microsoft.Office.Interop.PowerPoint; using System.Reflection; namespace Writ

  • pytorch 把MNIST数据集转换成图片和txt的方法

    本文介绍了pytorch 把MNIST数据集转换成图片和txt的方法,分享给大家,具体如下: 1.下载Mnist 数据集 import os # third-party library import torch import torch.nn as nn from torch.autograd import Variable import torch.utils.data as Data import torchvision import matplotlib.pyplot as plt # t

  • python 将视频 通过视频帧转换成时间实例

    我就废话不多说了,还是直接看代码吧! def frames_to_timecode(framerate,frames): """ 视频 通过视频帧转换成时间 :param framerate: 视频帧率 :param frames: 当前视频帧数 :return:时间(00:00:01:01) """ return '{0:02d}:{1:02d}:{2:02d}:{3:02d}'.format(int(frames / (3600 * fram

  • python函数中将变量名转换成字符串实例

    考虑到在日常中,常常需要对模型指标输出,但涉及多个模型的时候,需要对其有标示输出,故需要将模型变量名转换成字符串. 看到的基本方法有两种: 一.方法层面: 方法1(函数内推荐): def namestr(obj, namespace): return [name for name in namespace if namespace[name] is obj] print(namestr(lr_origin,globals()),'\n', namestr(lr_origin,globals())

随机推荐