先上图,有图有真相.本人亲测,可以通过

因为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相关推荐

  1. Java实现多个图片转化成PDF

    Java实现多个图片转化成PDF 依赖 <dependency><groupId>com.lowagie</groupId><artifactId>it ...

  2. c语言ppt转化为图片,ppt转长图软件下载 神奇PPT转长图软件 v2.0.0.225 中文安装版(附安装使用教程) 下载-脚本之家...

    神奇PPT转长图软件是一款专业的ppt转图片的软件,软件界面简洁,操作方便,本站提供的是该软件的安装版本,有需要的朋友快来下载使用吧! 软件介绍 神奇PPT转长图软件是一款将PPT文件转换为长条状图片 ...

  3. 计算机内容的ppt,电脑打开ppt文件出错提示ppt中的内容有问题如何解决

    ‍ 今天在本文中主要介绍一下在电脑系统中打开ppt文件出错提示ppt中的内容有问题的解决方法.有个用户从网上下载了一些PPT,包括.ppt和.pptx两种版本文件,点击打开总是提示ppt的内容有问题. ...

  4. java实现ppt/pptx转图片,转pdf的两种方式之一 poi

    poi的实现方式是分步实现的,并不能直接将ppt,pptx转为pdf. 首先是maven依赖 1.pom.xm需要引入的依赖 <!--poi依赖--><dependency>& ...

  5. java 搜索文件 pdf_Java查找并高亮PDF文本过程解析

    本文将介绍如何通过Java程序来查找并高亮PDF中的文本. 使用工具:Free Spire.PDF for Java(免费版) Jar文件获取及导入: 方法1:官网下载Jar文件包.下载后,解压,并将 ...

  6. java实现文件预览(Office转PDF)

    一.首先下载安装openOffice软件,下载地址:http://www.openoffice.org/download/index.html 当然,下载速度特别慢,下面是百度网盘地址. 链接:htt ...

  7. java判断文件是否图片_java怎么判断文件是否是图片

    java判断文件是否是图片的方法: 1.通过判断文件后缀名String extension = ""; int i = fileName.lastIndexOf('.'); if ...

  8. 图片弄成pdf怎么弄?怎么把图片做成pdf文件?图片转换成pdf格式的软件?

    有时候我们需要把图片转成pdf.可能还有些小伙伴不知道怎么去完成这项转换的,图片转pdf其实很简单,下面给大家分享一个超级简单的图片转pdf方法: 搜索一下:~~~~~~轻云pdf编辑压缩官网 打开网 ...

  9. Java OFD文件转换,OFD转PDF、图片、SVG、HTML工具类(2.0.0版本之前)

    OFDRW提供了将OFD文档导出为其他格式文档的能力,如导出为图片.SVG.PDF.文本等. OFDRW 转换模块在 2.0.0 之后抽象了多种文档导出接口,使用统一的 API 实现 OFD 文档导出 ...

最新文章

  1. 管理Vim插件的插件——Vundle
  2. Hibernate的工作原理
  3. Docker源码编译(二)
  4. php有意思知识分享,分享几个有意思的数组方法
  5. matlab 雷达图函数,R语言之可视化(20)ggradar雷达图
  6. CentOS 7.6 64位安装docker并设置开机启动
  7. 科研SCI论文图片常见问题和错误汇总
  8. Qt QWidget实现开关控件SwithButton(SlipButton)
  9. multiple versions of scala libraries detected解决方案
  10. 有一个懂机械、懂焊接、懂电子的爹是什么概念。。。
  11. Java:控制台输入车辆信息,将信息保存至数据库中
  12. Hibernate之悲观锁与乐观锁
  13. HH SaaS电商系统移动端商城,买家选择商品规格的交互设计
  14. 如何判断SVG事件对象中的鼠标来源?
  15. 动态规划 —— 背包问题 P01 —— 0-1背包
  16. SylixOS电源管理之外设功耗管理
  17. ol+天地图+geoserver_GeoServer的WMS服务加载到天地图
  18. MySQL入门(详细总结)
  19. 百度用户增长SQL面试题
  20. 微信营销十一(微信公众号吸粉技巧)

热门文章

  1. VSCode自定义配色方案
  2. IOS如何在相机取景框的正中央加视图
  3. 前端面试题(理论知识+HTML+CSS+JavaScript)
  4. PHP 类的静态成员变量和普通成员变量对比
  5. 基于CRM理念的ERP订单管理系统
  6. 创客匠人直播让在线网课实现直播“真互动“
  7. OpenGL之HDR
  8. 打磨机器人最重要的部件—柔性力控打磨工具
  9. PPDE提名计划 | 集众流所归,成浩海之阔
  10. 淘东电商项目(26) -门户登录功能