欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件在线预览ppt转换图片(二)  

程序员文章站 2022-06-12 09:54:01
...
package com.lx.file.convert.master.ppt;

import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import java.util.Locale;

import javax.imageio.ImageIO;

import org.apache.poi.sl.draw.DrawFactory;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFShape;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFTextParagraph;
import org.apache.poi.xslf.usermodel.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class PPT2ImageMaster {
	public String  PptxToImage(String filePath) throws IOException{
		//创建文件输入对象
		File outdir = new File("F:\\21.文档转换\\测试文档\\浪潮交流");

		File file=new File(filePath);
		FileInputStream fileinputstream =new FileInputStream(file);
		//读取幻灯片
		XMLSlideShow ppt = new XMLSlideShow(fileinputstream);
		List<XSLFSlide> slides = ppt.getSlides();
		Dimension pgsize = ppt.getPageSize();
		int width = (int) (pgsize.width);
		int height = (int) (pgsize.height);
		for (int i=0 ;i< slides.size();i++) {
			XSLFSlide slide = slides.get(i);
			for (XSLFShape shape : ppt.getSlides().get(i).getShapes()) {
				if (shape instanceof XSLFTextShape) {
					XSLFTextShape tsh = (XSLFTextShape) shape;
					for (XSLFTextParagraph p : tsh) {
						for (XSLFTextRun r : p) {
							System.out.println(r.getFontFamily());
							r.setFontFamily("微软雅黑");
						}
					}
				}
			}

			BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
			Graphics2D graphics = img.createGraphics();
			DrawFactory.getInstance(graphics).fixFonts(graphics);

			// default rendering options
			graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
			graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
			graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
			graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
					RenderingHints.VALUE_FRACTIONALMETRICS_ON);

			graphics.scale(1, 1);
			// draw stuff
			slide.draw(graphics);

			// save the result
				String outname = file.getName().replaceFirst(".pptx?", "");
				outname = String.format(Locale.ROOT, "%1$s-%2$04d.%3$s", outname, i, "png");
				File outfile = new File(outdir, outname);
				ImageIO.write(img, "png", outfile);

			graphics.dispose();
			img.flush();
		}
		
		
		return null;
		
	}
	public static void main(String[] args) {
		try {
			new PPT2ImageMaster().PptxToImage("F:\\21.文档转换\\测试文档\\ppttest.pptx");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}