Java实现PPT转化为PDF
这篇文章主要为大家详细介绍了java实现PPT转化为PDF的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一
·
这篇文章主要为大家详细介绍了java实现PPT转化为PDF的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
PPT文件
将 PPT文件转为 PDF文件后
①、添加POM依赖:
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.1.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.8</version>
</dependency>
②、将 PPT文件 转为 PDF文件案例代码:
package com.jeewechat.wechat.pdf;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;
import lombok.extern.log4j.Log4j;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hslf.model.Slide;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
/**
* @ClassName: PPTUtil
* @Description TODO 将 PPT文件 转为 PDF文件
* @Author: WangTianLiang
* @Create: 2021/5/12
**/
@Log4j
public class PPTUtil {
/**
* 测试用例
*/
public static void main(String[] args) {
// 读入PPT文件
File file = new File("E:/PPT/Java问题定位培训.ppt");
boolean b = doPPTtoImage (file);
System.out.println (b);
}
/**
* @description TODO 将PPT生成PDF
* @param file PPT文件对象
* @return boolean
* @author WangTianLiang
* @date 2021/5/12
*/
public static boolean doPPTtoImage(File file) {
// step 1: 文件格式校验
boolean isppt = checkFile(file);
if (!isppt) {
log.info("文件格式错误!");
return false;
}
//获取文件名称 如 Java问题定位培训.ppt
String oldFileName = file.getName();
// step 2: 文件名称截取获取 Java问题定位培训
String fileName = oldFileName.substring(0, oldFileName.indexOf("."));
try {
//step 3: 创建文件字节输入流对象 加载PPT
FileInputStream is = new FileInputStream(file);
SlideShow ppt = new SlideShow(is); //加载PPT
is.close();
Dimension pgsize = ppt.getPageSize();
Slide[] slide = ppt.getSlides(); //ppt页数
int slideLength = slide.length;
if (slideLength <= 0){
return false;
}
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
// step 4: 创建目录用于存储生产后的PDF文件
String pptFilePathUrl = "E:\\PPT\\";
// step 5: 创建目录用于存储PPT转为jpeg 后的图片文件
String imageFilePathUrl = "E:\\PPT\\"+ uuid +"\\";
File f=new File(imageFilePathUrl);
if(!f.isDirectory()) { //判断是否有D://ExamPaperDerived/此文件夹
f.mkdirs(); //没有则新建再保存
}
// step 6: 循环读取图片数据
for (int i = 0; i < slide.length; i++) {
log.info("第" + i + "页。");
if (slide[i].getNotesSheet() != null&& slide[i].getNotesSheet().getTextRuns() != null) {
// 获取第一个备注
log.info("备注:"+ slide[i].getNotesSheet().getTextRuns()[0].getText());
}
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++) {
rtruns[l].setFontIndex(1);
rtruns[l].setFontName("宋体");
// 获取文本列表
log.info(rtruns[l].getText());
}
}
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);
// step 7: 输出文件 设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径
FileOutputStream out = new FileOutputStream(imageFilePathUrl+ "pict_"+(i + 1) + ".jpeg");
ImageIO.write(img, "jpeg", out);
out.close();
}
// step 8: 将图片生产PPT
Boolean res = ImagetoPDF (imageFilePathUrl, pptFilePathUrl,fileName, ".pdf", slideLength);
if (res){
return true;
}
return false;
} catch (FileNotFoundException e) {
log.error(e.getMessage());
} catch (IOException e) {
log.error(e.getMessage());
}
return false;
}
/**
* @description TODO 检查文件是否为PPT
* @param file 文件对象
* @return boolean
* @author WangTianLiang
* @date 2021/5/12
*/
public static boolean checkFile(File file) {
boolean isppt = false;
//获取文件名称
String filename = file.getName();
String suffixname = null;
if (filename != null && filename.indexOf(".") != -1) {
//字符串截取获取文件后缀
suffixname = filename.substring(filename.indexOf("."));
if (suffixname.equals(".ppt")) {
isppt = true;
}
return isppt;
} else {
return isppt;
}
}
/**
* @description TODO 将图片生产PPT
* @param imageFilePathUrl 图片存储路径
* @param pptFilePathUrl PPT存储路径
* @param fileName PPT文件名称
* @param Type 文件后缀
* @param slideLength ppt页数
* @return java.lang.Boolean
* @author WangTianLiang
* @date 2021/5/12
*/
public static Boolean ImagetoPDF(String imageFilePathUrl,String pptFilePathUrl,String fileName, String Type,int slideLength) {
// step 1: 创建文档对象
Document document = new Document();
try {
// step 2: 我们创建一个writer来监听文档并将pdf流定向到文件
PdfWriter.getInstance(document, new FileOutputStream(pptFilePathUrl+fileName+Type));
// step 3: 打开文档
document.open();
for(int i=1;i<=slideLength;i++) {
// step 4: 将图片添加到PPT文件中作为内容
Image jpg = Image.getInstance(imageFilePathUrl+"pict_"+i+".jpeg");
jpg.scalePercent(70);
document.add(jpg);
}
// step 5: 关闭文档
document.close();
//创建文件流
File temp = new File(imageFilePathUrl);
// step 6: 判断文件是否存储
if (temp.exists()) {
// step 7: 递归删除文件信息
Boolean res = deleteDir (temp);
return res;
}
}
catch(DocumentException de) {
log.error(de.getMessage());
}
catch(IOException ioe) {
log.error(ioe.getMessage());
}
return false;
}
/**
* @description TODO 递归删除目录下的所有文件及子目录下所有文件
* @param dir 将要删除的文件目录
* @return boolean boolean 删除失败
* @author WangTianLiang
* @date 2021/5/12
*/
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
//递归删除目录中的子目录下
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// 目录此时为空,可以删除
return dir.delete();
}
}
希望可以帮助到您…
更多推荐
已为社区贡献2条内容
所有评论(0)