个人在poi的使用过程中遇到的问题
最近公司需要使用java开发文件浏览的程序,整体使用的是Java Swing做视图,文件部分需要展示PPT,Word以及Excel,所以需要把他们进行转换成一定格式,通过查询注意到使用Poi可以操作这几个文件类型,于是决定使用Poi。
Apache poi下载网址
http://poi.apache.org/download.html
PPT的转换
使用poi很容易做到,只是注意ppt和pptx的转换,通过查询相关方法很容易做到。我主要是通过poi将两种格式转化为图片,然后在Swing的Canva上进行展示。
//ppt转换图片:
public static boolean doPPTtoImage(String URL) {
FileInputStream FileInputStream = null;
FileOutputStream FileOutStream = null; HSLFSlideShow oneHSLFSlideShow = null;
//图片放大尺寸
int times=1;
long t1;
// 创建图片保存路径
String path = new GetFromFilePath().getNameFromPath(URL);
boolean flag = new DirSet().mkDir("./" + path); try {
try {
FileInputStream = new FileInputStream(URL);
oneHSLFSlideShow = new HSLFSlideShow(FileInputStream);
} catch (FileNotFoundException e) {
logger.error("ppt文件不存在==",e);
return false;
}
catch (IOException e) {
logger.error("读取文件异常==",e);
return false;
} // 获取PPT每页的大小
Dimension pgsize = oneHSLFSlideShow.getPageSize();
// 所有的PPT转为播放片
List<HSLFSlide> slides = oneHSLFSlideShow.getSlides();
// 对每一张幻灯片进行转换和操作 logger.debug("共"+slides.size()+"页");
t1=System.currentTimeMillis();
for (int i = 0; i < slides.size(); i++) {
List<List<HSLFTextParagraph>> oneTextParagraphs = slides.get(i).getTextParagraphs();
for (List<HSLFTextParagraph> list : oneTextParagraphs) {
for (HSLFTextParagraph hslfTextParagraph : list) {
List<HSLFTextRun> HSLFTextRunList = hslfTextParagraph.getTextRuns();
for (int j = 0; j < HSLFTextRunList.size(); j++) {
// 设置字体大小
Double size = HSLFTextRunList.get(j).getFontSize();
if ((size <= 0) || (size >= 26040)) {
HSLFTextRunList.get(j).setFontSize(20.0);
}
// 设置字体样式为宋体,解决乱码
HSLFTextRunList.get(j).setFontFamily("宋体");
}
}
}
// BufferedImage对象
BufferedImage img = new BufferedImage(pgsize.width *times ,pgsize.height * times,
BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = img.createGraphics();
graphics.setPaint(Color.white);
graphics.scale(times, times);
graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width * times, pgsize.height * times));
slides.get(i).draw(graphics); // 设置图片的存放路径和图片格式
String imgName = new GetFromFilePath().getNameFromPath(URL) + "_" + (i + 1) + ".jpeg";
try {
FileOutStream = new FileOutputStream(
"./" + path +"/"+ new GetFromFilePath().getNameFromPath(URL) + "_" + (i + 1) + ".jpeg");
} catch (FileNotFoundException e) {
logger.error(""+e);
e.printStackTrace();
}
// 图片保存指定目录
try {
ImageIO.write(img, "jpeg", FileOutStream);
} catch (IOException e) {
logger.