java实现PPT转化为PDF
作者:opzoonzhuzhengke 时间:2021-06-17 05:02:24
JACOB的方法,足可以解决这个问题,但是我既然以前曾经做过报表,就想尝试不同的方法。
JACOB是一座连接JAVA和微软的桥,所有的解析由微软解析。POI是没有微软解析的那么原汁原味的,所以如果要求高的话,还是使用JACOB。
大致思路很简单,将PPT先转化为图片,然后将图片写入PDF。转化图片是用POI,操作PDF使用ITEX。不过这个方法的BUG就是转化图片的POI效果不是很好。
导入的包分别是:itextpdf-5.1.3.jar,poi-3.8-20120326.jar,poi-scratchpad-3.8-20120326.jar。
然后贴代码了:
代码没有进行参数统一,写两个方法:
package com.zzk.cn;
import java.awt.Dimension;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.record.Slide;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
public class PPTtoImage {
public static void main(String[] args) {
// 读入PPT文件
File file = new File("D:/书本JVM总结7-9.ppt");
doPPTtoImage(file);
}
public static boolean doPPTtoImage(File file) {
boolean isppt = checkFile(file);
if (!isppt) {
System.out.println("你指定的文件不是ppt文档!");
return false;
}
try {
FileInputStream is = new FileInputStream(file);
SlideShow ppt = new SlideShow(is);
is.close();
Dimension pgsize = ppt.getPageSize();
org.apache.poi.hslf.model.Slide[] slide = ppt.getSlides();
for (int i = 0; i < slide.length; i++) {
System.out.print("第" + i + "页。");
if (slide[i].getNotesSheet() != null
&& slide[i].getNotesSheet().getTextRuns() != null) {
// 获取第一个备注
System.out.println("备注:"
+ 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("宋体");
// 获取文本列表
System.out.println(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);
// 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径
FileOutputStream out = new FileOutputStream("D:/testImage/pict_"
+ (i + 1) + ".jpeg");
javax.imageio.ImageIO.write(img, "jpeg", out);
out.close();
}
System.out.println("ok");
return true;
} catch (FileNotFoundException e) {
System.out.println(e);
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
// function 检查文件是否为PPT
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;
}
}
}
第二段代码:
package com.zzk.cn;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;
public class ImagetoPDF {
public static void main(String[] args) {
System.out.println("Chapter 6 example 3: using a relative path for HTML");
// step 1: creation of a document-object
Document document = new Document();
try {
// step 2:
// we create a writer that listens to the document
// and directs a PDF-stream to a file
PdfWriter.getInstance(document, new FileOutputStream("D:/测试图片.pdf"));
// HtmlWriter writer = HtmlWriter.getInstance(document, new FileOutputStream("Chap0603.html"));
// writer.setImagepath("../../images/kerstmis/");
// step 3: we open the document
document.open();
for(int i=1;i<=7;i++) {
// step 4: we add content
Image jpg = Image.getInstance("D:/testImage/pict_"+i+".jpeg");
jpg.scalePercent(50);
document.add(jpg);
}
}
catch(DocumentException de) {
System.err.println(de.getMessage());
}
catch(IOException ioe) {
System.err.println(ioe.getMessage());
}
// step 5: we close the document
document.close();
}
}
来源:https://blog.csdn.net/opzoonzhuzhengke/article/details/7609833
标签:java,ppt,pdf
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
浅谈JVM内存溢出原因和解决思路
2023-11-23 12:24:15
![](https://img.aspxhome.com/file/2023/1/59781_0s.jpg)
基于java 线程的几种状态(详解)
2022-08-31 19:51:47
![](https://img.aspxhome.com/file/2023/5/61845_0s.png)
Springboot实现图片上传功能的示例代码
2022-08-05 22:46:44
![](https://img.aspxhome.com/file/2023/2/62722_0s.png)
Spring Cloud Ribbon配置详解
2023-11-25 01:32:50
Android实现人脸支付的示例代码
2023-07-30 14:23:52
![](https://img.aspxhome.com/file/2023/0/86020_0s.gif)
Java数据结构之二叉排序树的实现
2023-07-05 02:27:25
![](https://img.aspxhome.com/file/2023/0/61600_0s.png)
浅谈SpringMVC的执行流程
2023-09-30 17:59:59
![](https://img.aspxhome.com/file/2023/8/62358_0s.png)
SpringBoot AOP控制Redis自动缓存和更新的示例
2023-08-31 17:34:37
JavaWeb Servlet实现文件上传与下载功能实例
2023-06-16 16:41:27
![](https://img.aspxhome.com/file/2023/2/62532_0s.png)
Spring Cloud Config实现分布式配置中心
2022-04-25 16:28:07
Mybatis Limit实现分页功能
2022-03-14 13:57:57
![](https://img.aspxhome.com/file/2023/6/61646_0s.png)
java异常处理执行顺序详解try catch finally
2022-10-01 04:10:10
![](https://img.aspxhome.com/file/2023/2/62122_0s.png)
Java简单高效实现分页功能
2022-05-24 13:56:02
Spring MVC入门_动力节点Java学院整理
2023-11-03 20:35:31
![](https://img.aspxhome.com/file/2023/3/58753_0s.jpg)
SpringBoot项目在IntelliJ IDEA中如何实现热部署
2023-10-29 13:30:22
![](https://img.aspxhome.com/file/2023/4/58584_0s.png)
swagger中如何给请求添加header
2023-05-15 14:27:52
![](https://img.aspxhome.com/file/2023/0/62350_0s.png)
SpringMVC利用dropzone组件实现图片上传
2022-01-19 00:37:00
Java实现单链表反转的多种方法总结
2023-11-11 02:28:08
![](https://img.aspxhome.com/file/2023/1/58721_0s.png)
关于@ApiImplicitParams、ApiImplicitParam的使用说明
2023-11-09 10:49:34
![](https://img.aspxhome.com/file/2023/0/59220_0s.jpg)
Java class文件格式之特殊字符串_动力节点Java学院整理
2022-02-11 14:45:59