溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用java實現(xiàn)在線預覽

發(fā)布時間:2021-09-27 09:42:19 來源:億速云 閱讀:171 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關(guān)如何使用java實現(xiàn)在線預覽,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

具體內(nèi)容如下所示:

###簡介

java實現(xiàn)在線預覽功能是一個大家在工作中也許會遇到的需求,如果公司有錢,直接使用付費的第三方軟件或者云在線預覽服務就可以了,例如永中office、office web 365(http://www.officeweb365.com/)他們都有云在線預覽服務,就是要錢0.0

如果想要免費的,可以用openoffice,還需要借助其他的工具(例如swfTools、FlexPaper等)才行,可參考這篇文章http://blog.csdn.net/z69183787/article/details/17468039,寫的挺細的,實現(xiàn)原理就是:

1.通過第三方工具openoffice,將word、excel、ppt、txt等文件轉(zhuǎn)換為pdf文件;

2.通過swfTools將pdf文件轉(zhuǎn)換成swf格式的文件;

3.通過FlexPaper文檔組件在頁面上進行展示。

當然如果裝了Adobe Reader XI,那把pdf直接拖到瀏覽器頁面就可以直接打開預覽,這樣就不需要步驟2、3了,前提就是客戶裝了Adobe Reader XI這個pdf閱讀器。

我這里介紹通過poi實現(xiàn)word、excel、ppt轉(zhuǎn)html,這樣就可以放在頁面上了。

###word轉(zhuǎn)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"); }}

###excel轉(zhuǎn)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"); }}

###ppt轉(zhuǎn)html

其實只是ppt轉(zhuǎn)圖片,有了圖片后放到頁面上去,點擊下一頁就一張張顯示就可以了。這里只介紹ppt轉(zhuǎn)圖片的過程。

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);          // 這里設(shè)置圖片的存放路徑和圖片的格式(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;      }    }  }

ppt轉(zhuǎn)圖片有個缺陷,就是ppt里不是宋體的字有些可能會變成框框。

以上都需要引入poi的jar包。

要實現(xiàn)在線預覽,只需把轉(zhuǎn)換得到的html在新標簽頁打開或者鑲嵌到某塊區(qū)域就可以展現(xiàn)了。

關(guān)于“如何使用java實現(xiàn)在線預覽”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI