关键代码就是: rtruns[l].setFontName("宋体")
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("F:/20110618.ppt")
doPPTtoImage(file)
}
public static boolean doPPTtoImage(File file) {
boolean isppt = checkFile(file)
if (!isppt) {
System.out.println("The image you specify don't exit!")
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 = 0i <slide.lengthi++) {
System.out.print("第" + i + "页。")
TextRun[] truns = slide[i].getTextRuns()
for (int k = 0k <truns.lengthk++) {
RichTextRun[] rtruns = truns[k].getRichTextRuns()
for (int l = 0l <rtruns.lengthl++) {
int index = rtruns[l].getFontIndex()
String name = rtruns[l].getFontName()
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("F:/test/pict_"
+ (i + 1) + ".jpeg")
javax.imageio.ImageIO.write(img, "jpeg", out)
out.close()
}
System.out.println("success!!")
return true
} catch (FileNotFoundException e) {
System.out.println(e)
// System.out.println("Can't find the image!")
} catch (IOException e) {
}
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
}
}
}
方法/步骤
打开制作完成的PPT。
请点击输入图片描述
点击左上角“文件”工具栏按钮
请点击输入图片描述
将PPT按照以下格式进行保存。
另存为——选择存储位置(我选择的是桌面)——修改文件名称——保存类型选择PNG格式(一定要PNG格式)——点击保存
请点击输入图片描述
点击“所有幻灯片”按钮
下一步点击“确定”按钮
这样你就讲所有的PPT页面以单张形式的保存了。
请点击输入图片描述
请点击输入图片描述
重新回到PPT,新增一页。
但是,为了好区分图片,建议开一个空白PPT,不要设计任何模板,白底就可以。
在新增的页面或者新开的PPT中插入你之前保存的PNG格式的图片。
插入——图片——全选图片——插入。
“以下图片是采用新增一页的模式,新建PPT只是在①的那一步不同,其他都是一样的”
请点击输入图片描述
请点击输入图片描述
插入的图片是重叠的形式出现,需要大家按照PPT内容的顺序进行移动对齐,并且将所有PPT进行组合
请点击输入图片描述
组合之后,就形成了一整张PPT,将图片另存出来即可。
请点击输入图片描述
最后来看看成品。
请点击输入图片描述
有时候我们需要从Excel文件中读取数据,或者我们为了商务或者财政的目的生成Excel格式的报表.Java没有对操作Excel文件提供内在的支持,所以我们需要寻找开源的APIs.当我开始寻找操作Excel的APIs时候,大部分人建议使用JExcel或者ApachePOI.在深入研究后,我发现由于以下主要原因ApachePOI是正确的选择.还有些关于高级特性的原因,但是我们不深入太多细节.1)Apache基金的支持.2)JExcel不支持xlsx格式而POI既支持xls格式又支持xlsx格式.3)ApachePOI是基于流的处理,因此更适合大文件和要求更少的内存.ApachePOI对处理Excel文件提供了强大的支持,并且能处理xls和xlsx格式的电子表格.关于ApachePOI一些重要的地方:1)ApachePOI包含适合Excel97-2007(.xls文件)的HSSF实现.2)ApachePOIXSSF实现用来处理Excel2007文件(.xlsx).3)ApachePOIHSSF和XSSF提供了读/写/修改Excel表格的机制.4)ApachePOI提供了XSSF的一个扩展SXSSF用来处理非常大的Excel工作单元.SXSSFAPI需要更少的内存,因此当处理非常大的电子表格同时堆内存又有限时,很合适使用.5)有两种模式可供选择--事件模式和用户模式.事件模式要求更少的内存,因为用tokens来读取Excel并处理.用户模式更加面向对象并且容易使用,因此在我们的示例中使用用户模式.6)ApachePOI为额外的Excel特性提供了强大支持,例如处理公式,创建单元格样式--颜色,边框,字体,头部,脚部,数据验证,图像,超链接等.ApachePOI的Maven依赖[java]viewplaincopyorg.apache.poipoi3.10-FINALorg.apache.poipoi-ooxml3.10-FINALApachePOI的当前版本是3.10-FINAL.如果你使用单独的java应用,添加jars根据下面的图片.读取Excel文件假设我们有一个叫Sample.xlsx的Excel文件,里面有两个sheet并且下面图片中的数据.我们想要读取这个Excel文件并且创建Countrieslist.sheet1有些额外的数据,当我们解析时会忽略它.我们的国家(Country)javabean如下:Country.java[java]viewplaincopypackagecom.journaldev.excel.readpublicclassCountry{privateStringnameprivateStringshortCodepublicCountry(Stringn,Stringc){this.name=nthis.shortCode=c}publicStringgetName(){returnname}publicvoidsetName(Stringname){this.name=name}publicStringgetShortCode(){returnshortCode}publicvoidsetShortCode(StringshortCode){this.shortCode=shortCode}@OverridepublicStringtoString(){returnname+"::"+shortCode}}读取Excel文件并创建Countrieslist代码如下:ReadExcelFileToList.java[java]viewplaincopypackagecom.journaldev.excel.readimportjava.io.FileInputStreamimportjava.io.IOExceptionimportjava.util.ArrayListimportjava.util.Iteratorimportjava.util.Listimportorg.apache.poi.hssf.usermodel.HSSFWorkbookimportorg.apache.poi.ss.usermodel.Cellimportorg.apache.poi.ss.usermodel.Rowimportorg.apache.poi.ss.usermodel.Sheetimportorg.apache.poi.ss.usermodel.Workbookimportorg.apache.poi.xssf.usermodel.XSSFWorkbookpublicclassReadExcelFileToList{publicstaticListreadExcelData(StringfileName){ListcountriesList=newArrayList()try{//Createtheinputstreamfromthexlsx/xlsfileFileInputStreamfis=newFileInputStream(fileName)//CreateWorkbookinstanceforxlsx/xlsfileinputstreamWorkbookworkbook=nullif(fileName.toLowerCase().endsWith("xlsx")){workbook=newXSSFWorkbook(fis)}elseif(fileName.toLowerCase().endsWith("xls")){workbook=newHSSFWorkbook(fis)}//GetthenumberofsheetsinthexlsxfileintnumberOfSheets=workbook.getNumberOfSheets()//loopthrougheachofthesheetsfor(inti=0irowIterator=sheet.iterator()while(rowIterator.hasNext()){Stringname=""StringshortCode=""//GettherowobjectRowrow=rowIterator.next()//Everyrowhascolumns,getthecolumniteratoranditerateoverthemIteratorcellIterator=row.cellIterator()while(cellIterator.hasNext()){//GettheCellobjectCellcell=cellIterator.next()//checkthecelltypeandprocessaccordinglyswitch(cell.getCellType()){caseCell.CELL_TYPE_STRING:if(shortCode.equalsIgnoreCase("")){shortCode=cell.getStringCellValue().trim()}elseif(name.equalsIgnoreCase("")){//2ndcolumnname=cell.getStringCellValue().trim()}else{//randomdata,leaveitSystem.out.println("Randomdata::"+cell.getStringCellValue())}breakcaseCell.CELL_TYPE_NUMERIC:System.out.println("Randomdata::"+cell.getNumericCellValue())}}//endofcelliteratorCountryc=newCountry(name,shortCode)countriesList.add(c)}//endofrowsiterator}//endofsheetsforloop//closefileinputstreamfis.close()}catch(IOExceptione){e.printStackTrace()}returncountriesList}publicstaticvoidmain(Stringargs[]){Listlist=readExcelData("Sample.xlsx")System.out.println("CountryList\n"+list)}}这个程序很容易明白,主要步骤如下:1)根据文件类型(.xls与.xlsx)创建Workbook实例,xlsx用XSSFWorkbook,xls用HSSFWorkbook.我们可以基于文件名字使用工厂模式创建一个包装类来创建Workbook实例.2)使用WorkbookgetNumberOfSheets()来获取sheet的数量,然后循环解析每一个sheet.使用getSheetAt(inti)方法获取Sheet实例.3)获取Row和Cell迭代器来获取每一个Cell对象.ApachePOI在这里使用了迭代器模式.4)使用switch-case根据Cell的类型来处理它.