English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Cet article présente principalement la prévisualisation des pièces jointes en Java, nécessitant OpenOffice, SWFTools, FlexPaper, les étapes spécifiques sont les suivantes :
1Résumé
Principe principal
1Conversion des fichiers word, excel, ppt, txt, etc. en fichiers pdf via l'outil tiers OpenOffice
2Conversion des fichiers pdf en fichiers swf format via SWFTools
3Affichage sur la page via le composant de document FlexPaper
2Paquet d'installation
1OpenOffice est un logiciel de traitement de texte gratuit et open source sous Apache
Adresse de téléchargement : Télécharger le site officiel d'Apache OpenOffice Version-3.4.1 http://www.openoffice.org/zh-cn/download/
2SWFTools est un ensemble d'outils pour traiter les fichiers swf Flash, nous l'utilisons pour convertir des fichiers pdf en fichiers swf!
Adresse de téléchargement : Télécharger le site officiel de SWFTools swftools-2013-04-09-1007.exe http://www.swftools.org/download.html
3FlexPaper est un composant open source léger permettant d'afficher divers documents dans un navigateur
Adresse de téléchargement : Télécharger le site officiel de FlexPaper Version1.5.1 https://flowpaper.com/download/
4JODConverter est un convertisseur de fichiers OpenDocument Java, ici nous utilisons uniquement son fichier jar
Adresse de téléchargement : Télécharger JODCConverter https://sourceforge.net/projects/jodconverter/files/
3Fichier d'installation
1Installez les fichiers téléchargés (à l'exclusion de JODConverter), le lecteur peut être configuré selon vos préférences ! Il est important de noter que lorsque l'installation d'OpenOffice est terminée, lorsque nous l'utilisons, nous devons ouvrir son service. Pour cela, nous devons ouvrir une commande :
Ouvrez une fenêtre DOS, accédez au lecteur d'installation d'OpenOffice, et tapez le code suivant pour démarrer le service :
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
注意最后一个命令前边的‘—',可不要写错!服务起不来,项目可是继续不下去的哦.
官网启动服务截图如下:
本地截图:
3.开发过程
1.新建项目,将flexpaper文件中的js文件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js文件主要是预览swf文件的插件)拷贝至网站根目录;将FlexPaperViewer.swf拷贝至网站根目录下(该文件主要是用在网页中播放swf文件的播放器),目录结构如下图:
注:需创建upload文件夹
2.创建fileUpload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>文档在线预览系统</title> <style> body {margin-top:100px;background:#fff;font-family: Verdana, Tahoma;} a {color:#CE4614;} #msg-box {color: #CE4614; font-size:0.9em;text-align:center;} #msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;} #msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;} #msg-box .nav {margin-top:20px;} </style> </head> <body> <div id="msg-box"> <form name="form1" method="post" enctype="multipart/form-data" action="docUploadConvertAction.jsp"> <div class="title"> 请上传要处理的文件,过程可能需要几分钟,请稍候片刻。 </div> <p> <input name="file1" type="file"> </p> <p> <input type="submit" name="Submit" value="上传"> </p> </form > </div> </body> </html>
3.创建转换页docUploadConvertAction.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.io."*"%> <%@page import="java.util.Enumeration"%> <%@page import="com.oreilly.servlet.MultipartRequest"%> <%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%> <%@page import="com.cectsims.util.DocConverter"%> <% //文件上传采用cos组件上传,可更换为commons-fileupload上传,文件上传后,保存在upload文件夹 //获取文件上传路径 String saveDirectory = application.getRealPath("/")+"upload"; //Print the information of the upload path System.out.println(saveDirectory); //Each file maximum50m int maxPostSize = 50 * 1024 * 1024 ; //Using the default naming strategy of cos, add after renaming1,2,3...if dfp is not added, the renamed file will overwrite DefaultFileRenamePolicy dfp = new DefaultFileRenamePolicy(); //response encoding is "UTF-8, using the default file name conflict resolution strategy, implementing upload, if dfp is not added, the renamed file will overwrite MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8 //MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8 //Output feedback information Enumeration files = multi.getFileNames(); while (files.hasMoreElements()) { System.err.println("ccc"); String name = (String)files.nextElement(); File f = multi.getFile(name); if(f!=null){ String fileName = multi.getFilesystemName(name); //Get the extension name of the uploaded file String extName=fileName.substring(fileName.lastIndexOf(".")+1); //Full file path String lastFileName= saveDirectory+"\\" + fileName; //Get the name of the file to be converted, replace the path name with '"/' String converfilename = saveDirectory.replaceAll("\\\\", "/")+"/"+fileName; System.out.println(converfilename); //Call the conversion class DocConverter and pass the file to be converted to the constructor of the class DocConverter d = new DocConverter(converfilename); //Call the conver method to start conversion, first execute doc2pdf() converts office files to pdf; then execute pdf2swf()将pdf转换为swf; d.conver(); //调用getswfPath()方法,打印转换后的swf文件路径 System.out.println(d.getswfPath()); //生成swf相对路径,以便传递给flexpaper播放器 String swfpath = "upload"+d.getswfPath().substring(d.getswfPath().lastIndexOf("/")); System.out.println(swfpath); //将相对路径放入sessio中保存 session.setAttribute("swfpath", swfpath); out.println("上传的文件:"+lastFileName); out.println("文件类型"+extName); out.println("<hr>"); } } %> !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style> body {margin-top:100px;background:#fff;font-family: Verdana, Tahoma;} a {color:#CE4614;} #msg-box {color: #CE4614; font-size:0.9em;text-align:center;} #msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;} #msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;} #msg-box .nav {margin-top:20px;} </style> </head> <body> <div> <form name="viewForm" id="form_swf" action="documentView.jsp" method="POST"> <input type='submit' value='预览' class='BUTTON SUBMIT'/> </form> </div> </body> </html>
创建查看页documentView.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String swfFilePath=session.getAttribute("swfpath").toString(); %> !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/flexpaper_flash.js"></script> <script type="text/javascript" src="js/flexpaper_flash_debug.js"></script> <style type="text/css" media="screen"> html, body { height:100%; } body { margin:0; padding:0; overflow:auto; } #flashContent { display:none; } </style> <title>文档在线预览系统</title> </head> <body> <div style="position:absolute;left:50px;top:10px;"> <a id="viewerPlaceHolder" style="width:820px;height:650px;display:block"></a> <script type="text/javascript"> var fp = new FlexPaperViewer( 'FlexPaperViewer', 'viewerPlaceHolder', { config : { SwfFile : escape('<%=swfFilePath%>'), Scale : 0.6, ZoomTransition : 'easeOut', ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true, FitWidthOnLoad : false, FullScreenAsMaxWindow : false, ProgressiveLoading : false, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : false, InitViewMode : 'SinglePage', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain: 'en_US' }}); </script> </div> </body> </html>
5.Création de la classe de conversion DocConverter.java
package com.cectsims.util; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import com.artofsolving.jodconverter.DocumentConverter; import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; /** * Conversion de format doc docx */ public class DocConverter { private static final int environment = 1;// environnement 1:windows 2:linux private String fileString;// (ne concerne que pdf2Problème de chemin swf) private String outputPath = "";// L'entrée du chemin, si elle n'est pas définie, elle est sortie à l'emplacement par défaut private String fileName; private File pdfFile; private File swfFile; private File docFile; public DocConverter(String fileString) { ini(fileString); } /** * Réinitialiser le fichier * * @param fileString */ public void setFile(String fileString) { ini(fileString); } /** * Initialiser * * @param fileString */ private void ini(String fileString) { this.fileString = fileString; fileName = fileString.substring(0, fileString.lastIndexOf(".")); docFile = new File(fileString); pdfFile = new File(fileName + ".pdf"); swfFile = new File(fileName + ".swf"); } /** * Convertir en PDF * * @param file */ private void doc2pdf() throws Exception { if (docFile.exists()) { if (!pdfFile.exists()) { OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); try { connection.connect(); DocumentConverter converter = new OpenOfficeDocumentConverter(connection); converter.convert(docFile, pdfFile); // fermez la connexion connection.disconnect(); System.out.println("****La conversion PDF est réussie, sortie PDF : " + pdfFile.getPath()+ "**** catch (java.net.ConnectException e) { e.printStackTrace(); System.out.println("****L'exception de conversion SWF, le service OpenOffice n'est pas démarré !**** throw e; catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) { e.printStackTrace(); System.out.println("****Exception du convertisseur SWF, échec de lecture du fichier de conversion**** throw e; } catch (Exception e) { e.printStackTrace(); throw e; } } else { System.out.println("****Déjà converti en PDF, pas besoin de convertir à nouveau**** } } else { System.out.println("****Exception du convertisseur SWF, le document à convertir n'existe pas, impossible de convertir**** } } /** * convertir en swf */ @SuppressWarnings("unused") private void pdf2swf() throws Exception { Runtime r = Runtime.getRuntime(); if (!swfFile.exists()) { if (pdfFile.exists()) { if (environment == 1) {}}// traitement sous environnement Windows try { Process p = r.exec("D:/Program Files/SWFTools/pdf2swf.exe "+ pdfFile.getPath() + " -o "+ swfFile.getPath() + " -T 9 System.out.print(loadStream(p.getInputStream())); System.err.print(loadStream(p.getErrorStream())); System.out.print(loadStream(p.getInputStream())); System.err.println("****La conversion SWF a réussi, le fichier est sorti : " + swfFile.getPath() + "**** if (pdfFile.exists()) { pdfFile.delete(); } } catch (IOException e) { e.printStackTrace(); throw e; } } else if (environment == 2) {}}// traitement sous environnement Linux try { Process p = r.exec("pdf2swf " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9 System.out.print(loadStream(p.getInputStream())); System.err.print(loadStream(p.getErrorStream())); System.err.println("****La conversion SWF a réussi, le fichier est sorti : " + swfFile.getPath() + "**** if (pdfFile.exists()) { pdfFile.delete(); } } catch (Exception e) { e.printStackTrace(); throw e; } } } else { System.out.println("****Le fichier PDF n'existe pas, impossible de convertir**** } } else { System.out.println("****Le SWF existe déjà, pas besoin de convertir**** } } static String loadStream(InputStream in) throws IOException { int ptr = 0; in = new BufferedInputStream(in); StringBuffer buffer = new StringBuffer(); while ((ptr = in.read()) != -1) {}} buffer.append((char) ptr); } return buffer.toString(); } /** * Méthode principale de conversion */ @SuppressWarnings("unused") public boolean conver() { if (swfFile.exists()) { System.out.println("****Le convertisseur SWF commence à travailler, le fichier a été converti en SWF**** return true; } if (environment == 1) {}} System.out.println("****Le convertisseur swf commence à travailler, l'environnement d'exécution actuel est windows**** } else { System.out.println("****Le convertisseur swf commence à travailler, l'environnement d'exécution actuel est linux**** } try { doc2pdf(); pdf2swf(); } catch (Exception e) { e.printStackTrace(); return false; } if (swfFile.exists()) { return true; } else { return false; } } /** * Retourner le chemin du fichier * * @param s */ public String getswfPath() { if (swfFile.exists()) { String tempString = swfFile.getPath(); / return tempString; } else { return ""; } } /** * Définir le chemin de sortie */ public void setOutputPath(String outputPath) { this.outputPath = outputPath; if (!outputPath.equals("")) { String realName = fileName.substring(fileName.lastIndexOf("/'), fileName.lastIndexOf(".")); if (outputPath.charAt(outputPath.length() - 1) == '/}) { swfFile = new File(outputPath + realName + ".swf"); } else { swfFile = new File(outputPath + realName + ".swf"); } } } }
6.Déploiement et publication
Démarrer tomcat, déployer l'application web actuelle
Entrer l'adresse dans la barre d'adressehttp://localhost:8080/ctcesims/documentUpload.jsp Comme dans l'image suivante :
Cliquez sur le bouton Aperçu, une interface de prévisualisation sera générée, comme dans l'image suivante :
4.FAQ
Si le swf ne peut pas être prévisualisé, veuillez visiter
http://www.macromedia.com/support/documentation/fr/flashplayer/aide/settings_manager04a.html#119065
Définissez le dossier de génération de swf comme un emplacement de fichier en confiance.
Les suivants fournissent flexpaper 2.1.9 的不同之处:初始化方式改变,若文件目录与项目目录不在一起,可将附件目录在服务器中设置为虚拟目录
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% //String swfFilePath=session.getAttribute("swfpath").toString(); %> !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/flexpaper.js"></script> <script type="text/javascript" src="js/flexpaper_handlers.js"></script> <style type="text/css" media="screen"> html, body { height:100%; } body { margin:0; padding:0; overflow:auto; } #flashContent { display:none; } </style> <title>文档在线预览系统</title> </head> <body> <div style="position:absolute;left:50px;top:10px;"> <div id="documentViewer" class="flexpaper_viewer" style="width:770px;height:500px"></div> <script type="text/javascript"> var startDocument = "Paper"; $('#documentViewer').FlexPaperViewer( { config : { SWFFile : 'upload/ddd3.swf', Scale : 0.6, ZoomTransition : 'easeOut', ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true, FitWidthOnLoad : false, FullScreenAsMaxWindow : false, ProgressiveLoading : false, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : false, InitViewMode : 'Portrait', RenderingOrder : 'flash', StartAtPage : '', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, WMode : 'window', localeChain: 'en_US' }} ); </script> </div> </body> </html>
Enfin, si vous souhaitez supprimer la fonction d'impression et le logo, vous pouvez recompiler le fichier flash de flexpaper. Vous pouvez également le télécharger sur Internet.
C'est tout pour cet article. J'espère que cela pourra aider à votre apprentissage et que vous serez nombreux à soutenir le tutoriel 'Yelling'.
Déclaration : Le contenu de cet article est来源于网络,les droits d'auteur appartiennent à leurs propriétaires respectifs. Le contenu est apporté par les utilisateurs d'Internet et téléchargé eux-mêmes. Le site web ne détient pas de droits de propriété, n'a pas été édité par l'homme, et n'assume pas de responsabilité juridique connexe. Si vous trouvez du contenu présumé enfreignant les droits d'auteur, veuillez envoyer un email à : notice#oldtoolbag.com (au moment de l'envoi d'un email, veuillez remplacer # par @ pour signaler un abus, et fournir des preuves pertinentes. Une fois vérifié, le site supprimera immédiatement le contenu présumé enfreignant les droits d'auteur.)