java ppt文件转图片,ppt转PDF
先上图,有图有真相.本人亲测,可以通过
因为android没办法直接加载ppt文件,需要借助第三方的软件,比如office,这就涉及一个文件保密的问题,只能使用自己的软件加载,android 可以直接使用mupdf框架加载pdf文件,意思就是说,可以把word,ppt等文件转成pdf文件,今天这里只展示ppt转pdf
思路:
1:我这是先把ppt转成一张张图片
2:然后把图片集合转成pdf
方法有点笨,目前是实现了这个功能,后边再来优化,直接看代码
ppt转图片是使用poi实现的,图片转pdf是使用另一个com.lowagie.text-2.1.jar 实现 ,源码jar奉上
链接:https://pan.baidu.com/s/1b4jzCW9aTd_oGm9oySkRuA
提取码:ytvp
调用方法
package com.test.util;public class Test {public static void main(String[] args) {String pptPath = "D:\\log\\aaa.ppt";String savePath = "D:\\log\\ccc.pdf";WorkToPdfUtil work = new WorkToPdfUtil(pptPath, savePath);work.doPPTtoPdf(new WordToPdfListener() {@Overridepublic void parsenerSuccess(String filePath) {System.out.println("====0000=====生成图片成功");}@Overridepublic void parsenerFailed(String desc) {System.out.println("=====0000====生成图片失败==" + desc);}});}}
转码回调接口回调
package com.test.util;public interface WordToPdfListener {void parsenerSuccess(String filePath);void parsenerFailed(String desc);}
转码的工具类,如果需要批量转码的,最好开线程来操作,这里写基本
package com.test.util;import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;import javax.imageio.ImageIO;import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;import com.lowagie.text.BadElementException;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfWriter;public class WorkToPdfUtil {WordToPdfListener listener;String filePath;String savePath;public WorkToPdfUtil(String filePath, String savePath) {this.filePath = filePath;this.savePath = savePath;// 清理缓存的图片路径delFile(imageCachePath());delFile(savePath);}public void doPPTtoPdf(WordToPdfListener listener) {this.listener = listener;File file = new File(filePath);boolean isppt = checkFile(file);if (!isppt) {listener.parsenerFailed("文件不存在");return;}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++) {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("宋体");}}BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);Graphics2D graphics = img.createGraphics();graphics.setPaint(Color.BLUE);graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));slide[i].draw(graphics);// 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径String imageCache = imageCachePath();File fileCache = new File(imageCache);if (fileCache.exists()) {fileCache.delete();}fileCache.mkdir();// 可测试多种图片格式FileOutputStream out = new FileOutputStream(fileCache + "/" + (i + 1) + ".jpg");javax.imageio.ImageIO.write(img, "png", out);out.close();}String imageCache = imageCachePath();imageToPdf(imageCache, savePath);} catch (Exception e) {listener.parsenerFailed("转码异常: " + e.toString());e.printStackTrace();}}/*** 获取图片的缓存路径* * @param filePath* @return*/private String imageCachePath() {File file = new File(filePath);String pptPath = file.getPath();pptPath = pptPath.substring(0, pptPath.lastIndexOf("\\"));String imageCache = pptPath + "\\imagecache";System.out.println("====图片生成的路径===" + pptPath);return imageCache;}/*** * @param imageFolderPath* 图片文件夹地址* @param pdfPath* PDF文件保存地址* */private void imageToPdf(String imageFolderPath, String pdfPath) {if (!imageFolderPath.endsWith("/")) {imageFolderPath = imageFolderPath + "\\";}System.out.println("====图片生成PDF===" + imageFolderPath);try {File pdfFile = new File(pdfPath);if (!pdfFile.exists()) {pdfFile.createNewFile();}String imagePath = null;FileOutputStream fos = new FileOutputStream(pdfPath);Document doc = new Document(null, 0, 0, 0, 0);PdfWriter.getInstance(doc, fos);BufferedImage img = null;Image image = null;File file = new File(imageFolderPath);File[] files = file.listFiles();List<File> listsFile = CollListSort(files);for (File file1 : listsFile) {if (file1.getName().endsWith(".png") || file1.getName().endsWith(".jpg")|| file1.getName().endsWith(".gif") || file1.getName().endsWith(".jpeg")|| file1.getName().endsWith(".tif")) {// System.out.println(file1.getName());imagePath = imageFolderPath + file1.getName();System.out.println("=====图片的顺序===" + file1.getName());// 读取图片流img = ImageIO.read(new File(imagePath));// 根据图片大小设置文档大小doc.setPageSize(new Rectangle(img.getWidth(), img.getHeight()));// 实例化图片image = Image.getInstance(imagePath);// 添加图片到文档doc.open();doc.add(image);}}// 关闭文档doc.close();listener.parsenerSuccess(pdfPath);} catch (Exception e) {e.printStackTrace();}}/*** 对文件名字,按照名字大小进行排序* * @param files* @return*/private List<File> CollListSort(File[] files) {if (files == null || files.length < 1) {return null;}List<File> listsFile = new ArrayList<File>();for (int i = 0; i < files.length; i++) {listsFile.add(files[i]);}Collections.sort(listsFile, new Comparator<File>() {@Overridepublic int compare(File file1, File file2) {String fileName1 = file1.getName();fileName1 = fileName1.substring(0, fileName1.indexOf("."));String fileName2 = file2.getName();fileName2 = fileName2.substring(0, fileName2.indexOf("."));int fileNum1 = Integer.parseInt(fileName1);int fileNum2 = Integer.parseInt(fileName2);return fileNum1 - fileNum2;}});return listsFile;}private void delFile(String fileDelPath) {File file = new File(fileDelPath);if (!file.exists()) {return;}if (file.isFile()) {boolean isDel = file.delete();System.out.println("====删除文件==" + file.getPath() + "===" + isDel);} else if (file.isDirectory()) {File[] fileList = file.listFiles();for (int i = 0; i < fileList.length; i++) {File fileDel = fileList[i];if (fileDel.isDirectory()) {delFile(fileDel.getPath());} else {boolean isDel = fileDel.delete();System.out.println("====删除文件==" + fileDel.getPath() + "===" + isDel);}}}}// function 检查文件是否为PPTprivate boolean checkFile(File file) {boolean isppt = false;String filename = file.getName();String suffixname = null;if (filename != null && filename.indexOf(".") != -1) {suffixname = filename.substring(filename.lastIndexOf("."));if (suffixname.equals(".ppt") || suffixname.equals(".pptx")) {isppt = true;}return isppt;} else {return isppt;}}}
java ppt文件转图片,ppt转PDF相关推荐
- Java实现多个图片转化成PDF
Java实现多个图片转化成PDF 依赖 <dependency><groupId>com.lowagie</groupId><artifactId>it ...
- c语言ppt转化为图片,ppt转长图软件下载 神奇PPT转长图软件 v2.0.0.225 中文安装版(附安装使用教程) 下载-脚本之家...
神奇PPT转长图软件是一款专业的ppt转图片的软件,软件界面简洁,操作方便,本站提供的是该软件的安装版本,有需要的朋友快来下载使用吧! 软件介绍 神奇PPT转长图软件是一款将PPT文件转换为长条状图片 ...
- 计算机内容的ppt,电脑打开ppt文件出错提示ppt中的内容有问题如何解决
今天在本文中主要介绍一下在电脑系统中打开ppt文件出错提示ppt中的内容有问题的解决方法.有个用户从网上下载了一些PPT,包括.ppt和.pptx两种版本文件,点击打开总是提示ppt的内容有问题. ...
- java实现ppt/pptx转图片,转pdf的两种方式之一 poi
poi的实现方式是分步实现的,并不能直接将ppt,pptx转为pdf. 首先是maven依赖 1.pom.xm需要引入的依赖 <!--poi依赖--><dependency>& ...
- java 搜索文件 pdf_Java查找并高亮PDF文本过程解析
本文将介绍如何通过Java程序来查找并高亮PDF中的文本. 使用工具:Free Spire.PDF for Java(免费版) Jar文件获取及导入: 方法1:官网下载Jar文件包.下载后,解压,并将 ...
- java实现文件预览(Office转PDF)
一.首先下载安装openOffice软件,下载地址:http://www.openoffice.org/download/index.html 当然,下载速度特别慢,下面是百度网盘地址. 链接:htt ...
- java判断文件是否图片_java怎么判断文件是否是图片
java判断文件是否是图片的方法: 1.通过判断文件后缀名String extension = ""; int i = fileName.lastIndexOf('.'); if ...
- 图片弄成pdf怎么弄?怎么把图片做成pdf文件?图片转换成pdf格式的软件?
有时候我们需要把图片转成pdf.可能还有些小伙伴不知道怎么去完成这项转换的,图片转pdf其实很简单,下面给大家分享一个超级简单的图片转pdf方法: 搜索一下:~~~~~~轻云pdf编辑压缩官网 打开网 ...
- Java OFD文件转换,OFD转PDF、图片、SVG、HTML工具类(2.0.0版本之前)
OFDRW提供了将OFD文档导出为其他格式文档的能力,如导出为图片.SVG.PDF.文本等. OFDRW 转换模块在 2.0.0 之后抽象了多种文档导出接口,使用统一的 API 实现 OFD 文档导出 ...
最新文章
- 管理Vim插件的插件——Vundle
- Hibernate的工作原理
- Docker源码编译(二)
- php有意思知识分享,分享几个有意思的数组方法
- matlab 雷达图函数,R语言之可视化(20)ggradar雷达图
- CentOS 7.6 64位安装docker并设置开机启动
- 科研SCI论文图片常见问题和错误汇总
- Qt QWidget实现开关控件SwithButton(SlipButton)
- multiple versions of scala libraries detected解决方案
- 有一个懂机械、懂焊接、懂电子的爹是什么概念。。。
- Java:控制台输入车辆信息,将信息保存至数据库中
- Hibernate之悲观锁与乐观锁
- HH SaaS电商系统移动端商城,买家选择商品规格的交互设计
- 如何判断SVG事件对象中的鼠标来源?
- 动态规划 —— 背包问题 P01 —— 0-1背包
- SylixOS电源管理之外设功耗管理
- ol+天地图+geoserver_GeoServer的WMS服务加载到天地图
- MySQL入门(详细总结)
- 百度用户增长SQL面试题
- 微信营销十一(微信公众号吸粉技巧)