将PPT转化为PDF我的JAVA代码实现!

标签: ppt 转化 pdf | 发表时间:2012-05-28 16:55 | 作者:opzoonzhuzhengke
出处:http://blog.csdn.net

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




作者:opzoonzhuzhengke 发表于2012-5-28 16:55:24 原文链接
阅读:4 评论:0 查看评论

相关 [ppt 转化 pdf] 推荐:

将PPT转化为PDF我的JAVA代码实现!

- - CSDN博客推荐文章
jacob的方法,足可以解决这个问题,但是我既然以前曾经做过报表,就想尝试不同的方法. JACOB是一座连接JAVA和微软的桥,所有的解析由微软解析. POI是没有微软解析的那么原汁原味的,所以如果要求高的话,还是使用JACOB. 大致思路很简单,将PPT先转化为图片,然后将图片写入PDF. 转化图片是用POI,操作PDF使用ITEX.

pdftohtml – 将PDF转化为HTML | 小众软件 > 实用工具

- Guan - 小众软件
pdftohtml 可以将 PDF 转化为 HTML ,便于嵌入网页中,并且可以提取 PDF 中的图片. pdftohtml 是一款开源、跨平台软件,支持 linux , win , mac 等. pdftohtml 没有 GUI 界面,需要在 CMD 中操作:. 把 PDF 文件复制到软件目录中,在 CMD 中运行 pdftohtml xxx.pdf ,软件会自动转化 HTML 文件并提取 PDF 中的图片.

java合并PDF

- - Java - 编程语言 - ITeye博客
15.         * * 合並pdf文件 * * @param files 要合並文件數組(絕對路徑如{ "e:\\1.pdf", "e:\\2.pdf" ,. 17.         * 合並後新產生的文件絕對路徑如e:\\temp.pdf,請自己刪除用過後不再用的文件請 * @return boolean.

Html 转换成PDF

- - 编程语言 - ITeye博客
最近在搞一个关于html转换为pdf的需求,网上找了很多,但是如果批量处理就会出现问题,最后找到了PD4ML,解决了我的问题. String urlstring = "file:///D:/债权转让及受让协议--魏然2014-08-16.html";. 需要在src目录下创建fonts文件夹,并且在文件夹中建立pd4fonts.properties ,配置文件中的内容如下.

用PPT做笔记

- winners - 蔡學鏞【言程序】部落格
我具有十多年的讲师经历,这让我浅意识里「随时准备开发新课程教材」. 开发教材的方式有两种:「由上而下」或者「由下而上」. 这次我在QCon的演讲有两场,刚好分别是用这两种不同的方式做出来的. 对于我熟悉的主题,我采用由上而下的方式制作教材PPT;例如,我已经相当熟悉REBOL,所以我可以先决定要讲哪些内容,然后安排这些内容的次序,再加上一些润饰,就OK了.

Ubuntu 10.10 Manual 手册[PDF]

- Power - cnBeta.COM
Official Ubuntu 10.10 Manual 手册《Getting Started with Ubuntu 10.10》,现在已经可以免费下载了. 该书对新手来说,是一本不错的入门书籍. 该书遵循开眼协议,可以下载、阅读、修改和分享. 该书教你一步一步掌握Ubuntu. 虽然版本是Ubuntu 10.10的,但是变化基本不大,仍有益处.

别再说”pdf格式”了

- yboren - 考据癖
* 唔…就是…一种娱乐性质的较真,再次重申:较真有理,严谨无罪. * 等一下,上一行的“再次”和“重申”的“重”表达的是同一个意思,表意冗余了. * 呐呐呐,上面这种行为就是咬文嚼字了. 写这篇文章主要是想较真一个小问题,一种很常见的表达错误. 起因是今天Geek and poke的更新:. 标题里的pedantic一词本意是“迂腐”的意思,不过在我眼里这个词和geek、nerd一样毫无贬义,而且相当酷.

如何给领导做PPT?

- Xiaoshan - 般若黑洞
给领导做PPT可能是一件让人无比头疼的事,他们口才极佳,但决不可能不介意PPT的模样. 一份美观、稳重、严谨的PPT对他们意味着什么其他人未必能深刻体会,但我们一定能体会做出这么一个PPT对自己意味着什么. 问题是:如何才能轻松惬意地做出这么一份PPT. 花花绿绿的PPT绝对是他们无比憎恨的类型,但你也不要义无反顾的使用过分简单的单色.

ext2/ext3/ext4简介(PPT)

- tiger - 斯巴达第二季
今天下午我的讲座,名字是《Why we need ext4》,其实主要是我上半年学到东西的一个小结.

PPT的四重境界

- 沈裔 - 般若黑洞
如果你一直在关注这个博客,一定对这个的问题很感兴趣:如何成为真正的PPT高手. 对于一个成熟的领域,没有精研5年以上是称不上高手的. 所以在这个问题上,一直都不敢大言不惭. 不过经常面对这样的问题,拿“我不是高手”说事儿连自己都觉得搪塞. 这些天在两地来来往往,坐在班车上看到路边的公交牌,广告牌和那些大大小小的招牌,觉得应该说点啥了.