- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- 如何使用java實(shí)現在線(xiàn)預覽
這篇文章將為大家詳細講解有關(guān)如何使用java實(shí)現在線(xiàn)預覽,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
具體內容如下所示:
###簡(jiǎn)介
java實(shí)現在線(xiàn)預覽功能是一個(gè)大家在工作中也許會(huì )遇到的需求,如果公司有錢(qián),直接使用付費的第三方軟件或者云在線(xiàn)預覽服務(wù)就可以了,例如永中office、office web 365(http://www.officeweb365.com/)他們都有云在線(xiàn)預覽服務(wù),就是要錢(qián)0.0
如果想要免費的,可以用openoffice,還需要借助其他的工具(例如swfTools、FlexPaper等)才行,可參考這篇文章http://blog.csdn.net/z69183787/article/details/17468039,寫(xiě)的挺細的,實(shí)現原理就是:
1.通過(guò)第三方工具openoffice,將word、excel、ppt、txt等文件轉換為pdf文件;
2.通過(guò)swfTools將pdf文件轉換成swf格式的文件;
3.通過(guò)FlexPaper文檔組件在頁(yè)面上進(jìn)行展示。
當然如果裝了Adobe Reader XI,那把pdf直接拖到瀏覽器頁(yè)面就可以直接打開(kāi)預覽,這樣就不需要步驟2、3了,前提就是客戶(hù)裝了Adobe Reader XI這個(gè)pdf閱讀器。
我這里介紹通過(guò)poi實(shí)現word、excel、ppt轉html,這樣就可以放在頁(yè)面上了。
###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"); }}
###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"); }}
###ppt轉html
其實(shí)只是ppt轉圖片,有了圖片后放到頁(yè)面上去,點(diǎn)擊下一頁(yè)就一張張顯示就可以了。這里只介紹ppt轉圖片的過(guò)程。
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 + "頁(yè)。"); 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; } } }
ppt轉圖片有個(gè)缺陷,就是ppt里不是宋體的字有些可能會(huì )變成框框。
以上都需要引入poi的jar包。
要實(shí)現在線(xiàn)預覽,只需把轉換得到的html在新標簽頁(yè)打開(kāi)或者鑲嵌到某塊區域就可以展現了。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站