java实现在线预览--poi实现word excel ppt转html

                       

java实现在线预览

- -之poi实现word、excel、ppt转html

简介

java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服务就可以了,例如永中office、office web 365(http://www.officeweb365.com/)他们都有云在线预览服务,就是要钱0.0
如果想要免费的,可以用openoffice,还需要借助其他的工具(例如swfTools、FlexPaper等)才行,可参考这篇文章http://blog.csdn.net/z69183787/article/details/17468039,写的挺细的,实现原理就是:
1.通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件;
2.通过swfTools将pdf文件转换成swf格式的文件;
3.通过FlexPaper文档组件在页面上进行展示。
当然如果装了Adobe Reader XI,那把pdf直接拖到浏览器页面就可以直接打开预览,这样就不需要步骤2、3了,前提就是客户装了Adobe Reader XI这个pdf阅读器。
我这里介绍通过poi实现word、excel、ppt转html,这样就可以放在页面上了。

word转html

package wordToHtml;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStream;import java.util.List;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.apache.commons.io.FileUtils;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.converter.PicturesManager;import org.apache.poi.hwpf.converter.WordToHtmlConverter;import org.apache.poi.hwpf.usermodel.Picture;import org.apache.poi.hwpf.usermodel.PictureType;import org.w3c.dom.Document;public class PoiWordToHtml { public static void main(String[] args) throws Throwable {  final String path = "D:\\poi-test\\wordToHtml\\";  final String file = "人员选择系分.doc";  InputStream input = new FileInputStream(path + file);  HWPFDocument wordDocument = new HWPFDocument(input);  WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(    DocumentBuilderFactory.newInstance().newDocumentBuilder()      .newDocument());  wordToHtmlConverter.setPicturesManager(new PicturesManager() {   public String savePicture(byte[] content, PictureType pictureType,     String suggestedName, float widthInches, float heightInches) {    return suggestedName;   }  });  wordToHtmlConverter.processDocument(wordDocument);  List pics = wordDocument.getPicturesTable().getAllPictures();  if (pics != null) {   for (int i = 0; i < pics.size(); i++) {    Picture pic = (Picture) pics.get(i);    try {     pic.writeImageContent(new FileOutputStream(path       + pic.suggestFullFileName()));    } catch (FileNotFoundException e) {     e.printStackTrace();    }   }  }  Document htmlDocument = wordToHtmlConverter.getDocument();  ByteArrayOutputStream outStream = new ByteArrayOutputStream();  DOMSource domSource = new DOMSource(htmlDocument);  StreamResult streamResult = new StreamResult(outStream);  TransformerFactory tf = TransformerFactory.newInstance();  Transformer serializer = tf.newTransformer();  serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");  serializer.setOutputProperty(OutputKeys.INDENT, "yes");  serializer.setOutputProperty(OutputKeys.METHOD, "html");  serializer.transform(domSource, streamResult);  outStream.close();  String content = new String(outStream.toByteArray());  FileUtils.writeStringToFile(new File(path, "人员选择系分.html"), content, "utf-8"); }}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

excel转html

package excelToHtml;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.apache.commons.io.FileUtils;import org.apache.poi.hssf.converter.ExcelToHtmlConverter;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hwpf.converter.PicturesManager;import org.apache.poi.hwpf.converter.WordToHtmlConverter;import org.apache.poi.hwpf.usermodel.Picture;import org.apache.poi.hwpf.usermodel.PictureType;import org.w3c.dom.Document;public class PoiExcelToHtml {    final static String path = "D:\\poi-test\\excelToHtml\\";     final static String file = "exportExcel.xls"; public static void main(String args[]) throws Exception {     InputStream input=new FileInputStream(path+file);     HSSFWorkbook excelBook=new HSSFWorkbook(input);     ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter (DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() );     excelToHtmlConverter.processWorkbook(excelBook);     List pics = excelBook.getAllPictures();     if (pics != null) {         for (int i = 0; i < pics.size(); i++) {             Picture pic = (Picture) pics.get (i);             try {                 pic.writeImageContent (new FileOutputStream (path + pic.suggestFullFileName() ) );             } catch (FileNotFoundException e) {                 e.printStackTrace();             }         }     }     Document htmlDocument =excelToHtmlConverter.getDocument();     ByteArrayOutputStream outStream = new ByteArrayOutputStream();     DOMSource domSource = new DOMSource (htmlDocument);     StreamResult streamResult = new StreamResult (outStream);     TransformerFactory tf = TransformerFactory.newInstance();     Transformer serializer = tf.newTransformer();     serializer.setOutputProperty (OutputKeys.ENCODING, "utf-8");     serializer.setOutputProperty (OutputKeys.INDENT, "yes");     serializer.setOutputProperty (OutputKeys.METHOD, "html");     serializer.transform (domSource, streamResult);     outStream.close();     String content = new String (outStream.toByteArray() );     FileUtils.writeStringToFile(new File (path, "exportExcel.html"), content, "utf-8"); }}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

ppt转html

其实只是ppt转图片,有了图片后放到页面上去,点击下一页就一张张显示就可以了。这里只介绍ppt转图片的过程。

package pptToImg;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:/poi-test/pptToImg/test.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 = 0; i < slide.length; i++) {                   System.out.print("第" + 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++){                             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.BLUE);                   graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));                   slide[i].draw(graphics);                   // 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径                   FileOutputStream out = new FileOutputStream("D:/poi-test/pptToImg/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;           }       }   }  
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

ppt转图片有个缺陷,就是ppt里不是宋体的字有些可能会变成框框。
以上都需要引入poi的jar包。
要实现在线预览,只需把转换得到的html在新标签页打开或者镶嵌到某块区域就可以展现了。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43678660/article/details/86316576