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();

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

java pdf转ppt_java实现PPT转化为PDF相关推荐

  1. 【WebPPTtoPDF】在线将PPT转化为PDF,支持自定义排列方式

    GitHub地址:https://github.com/HanquanHq/WebPPTtoPDF1 练手小项目,不足之处欢迎指正. WebPPTtoPDF 简介 在线将PPT转化为PDF的工具 20 ...

  2. 使用jacob将ppt转化为pdf

    1.下载jacob包 2.将jar包引入项目,根据系统位数将相关dll文件引入到{JAVA_HOME}\jre\bin和C:\Windows\System32目录下 3.代码 //测试     pub ...

  3. 怎样把ppt转化为pdf

    怎样把ppt转化为pdf 简介 你是否还在为找不到合适的PPT转换成PDF转换器而感到烦恼?或者对大量的PPT幻灯片内容需要转换成PDF而犯愁呢?下面笔者为大家介绍2种将PPT演示文稿中的文字转换成P ...

  4. 怎样将ppt转化为pdf文件

    在职场工作当中ppt文件和pdf文件都是不可或缺的.Ppt文件通常用于工作会议.工作汇报等方面,而pdf文件则是用于文件的浏览查阅.文件的保存以及文件的打印.两种文件虽然是完全不同的形式,不同的作用, ...

  5. 想在Java中把PPT转化为PDF吗?教你用Aspose.Slides轻松搞定!

    PDF已成为最广泛和最常用的数字文档格式.由于PDF格式具有固定的布局,因此大多数文档在共享之前都已转换为PDF. 在将各种文档转换为PDF格式的过程中,PPT到PDF的转换是一种流行的用例,且非常的 ...

  6. 使用powershell将Ppt转化为PDF

    直接上代码 #UPDATE DATA IN Ppt FILES 更新Excel文件中的数据 #THEN CREATE PDF FILE Then 建立PDF文档[string]$path = &quo ...

  7. python批量将word、ppt转化为pdf(极简版)

    日将将PPT和word批量转成pdf的需求还是比较普遍的.下列两段代码中,word转pdf的有时候会出现莫名奇妙的报错,跑了两次由于顺利将工作完成了,也没继续研究原因,有需要的使用时得注意下.ppt转 ...

  8. PDF怎么转成PPT?六种PDF转PPT的简单方法,轻松解决!

    PDF怎么转成PPT?相信这是许多职场小伙伴都会遇到的问题.PDF的优点大家都知道,能够保护文档内容不被篡改,而且它可以很好的保留文档字体,对方打开不会出现乱码的现象. 但是对于需要经常展示课件或者作 ...

  9. Java怎么打开ppt_Java 加密PPT(设置打开密码、编辑权限密码)

    import com.spire.presentation.*; public class Encrypt_PPT { public static void main(String[] args) t ...

最新文章

  1. PHP访问mysql的常用函数,PHP操作MySQL数据库常用函数
  2. html调后台接口_前后端分离之让前端开发脱离接口束缚(mock)
  3. 微信小程序开发遇到的那些“坑”(1.2.0-1.4.0)
  4. Java 8系列之Stream的强大工具Collector
  5. Python3比较运算符
  6. VTK:PolyData之WarpVector
  7. 3 软件测试对象,查找条件对象By—Selenium自动化测试指南(3)
  8. Eclipse调试常用技巧
  9. 学习Linux坚持贴!
  10. Angular Material 攻略 04 Icon
  11. 1.shell脚本编程——基础篇(一)
  12. 尚硅谷JavaWeb视频教程,新版升级
  13. SIR传染病模型及matlab代码
  14. 爬虫千万条,守法第一条,爬虫不规范,亲人两行泪
  15. 网络流(4)——带有容量的顶点和二部匹配
  16. EXCEL VBA窗口快捷键冲突查找原因
  17. 给曾经爱过、正在爱着、将要爱的人们!
  18. win系统excel、txt文件传到linux,行列数对不齐,乱码的的问题
  19. 电脑重装系统数据恢复方法教程
  20. 中文自然语言处理工具介绍

热门文章

  1. JAVA 使用WinAppDriver对PC桌面软件进行自动化测试
  2. cad自动运行dvb lisp_CAD自动加载程序6大方法
  3. 冲刺金九银十!GitHub中文社区秋招趋势最热的面试题被我整理好了
  4. 16.GridView宫格的实现及其显示其…
  5. 项目开发计划书_【创业先锋班】创业计划书撰写——第七期创业先锋班晚自习...
  6. 基于遗传算法求解物流配送中心选址附Matlab代码
  7. 基于 GoogleMap 离线 API 源码在内网中加载卫星地图的方法
  8. ASN.1笔记——语法规则与类型概述
  9. matlab实验代码(总)
  10. 正则表达式转换为相应的文字小工具