Cet article présente principalement la mise en œuvre Java de l'aperçu de l'attachement, qui nécessite OpenOffice, SWFTools et Flexpaper. Les étapes spécifiques sont les suivantes:
1. Présentation
Principes principaux
1. Convertir Word, Excel, PPT, TXT et d'autres fichiers en fichiers PDF via l'outil tiers OpenOffice
2. Convertir le fichier PDF en fichier de format SWF via SWFTools
3. Afficher sur la page via le composant du document Flexpaper
2. Téléchargez le package d'installation
1.OpenOffice est un logiciel de traitement de texte ouvert et gratuit sous Apache
Adresse de téléchargement: Version de téléchargement du site officiel d'OppenOffice OppenOffice - 3.4.1 http://www.openoffice.org/zh-cn/download/
2. Swftools est un ensemble de kits d'outils utilisés pour traiter les fichiers SWF de Flash. Nous l'utilisons pour convertir les fichiers PDF en fichiers SWF!
Télécharger l'adresse: Swftools Site Web Officiel Télécharger SWFTools-2013-04-09-1007.exe http://www.swftools.org/download.html
3.Flexpaper est un composant léger open source qui affiche divers documents sur le navigateur.
Télécharger Adresse: Flexpaper Site Web Officiel Télécharger la version 1.5.1 https://flowpaper.com/download/
4.JodConverter Un convertisseur de fichiers Java OpenDocument, où nous utilisons uniquement son package JAR
Télécharger l'adresse: JodcConverter Télécharger https://sourceforge.net/projects/jodconverter/files/
3. Installez le fichier
1. Installez le fichier téléchargé (sauf JodConverter) et la lettre de lecteur peut être définie comme vous le souhaitez! Il convient de noter qu'après la fin de l'installation d'OpenOffice, lorsque nous l'utilisons, nous devons ouvrir son service. Ensuite, nous devons l'ouvrir dans la commande:
Ouvrez la fenêtre DOS, entrez la lettre du lecteur d'installation d'OpenOffice et entrez le code suivant pour démarrer le service:
Software -headless -Accept = "Socket, hôte = 127.0.0.1, port = 8100; URP;" -NofirststartWizard
Faites attention au '-' devant la dernière commande, ne l'écrivez pas mal! Si vous ne pouvez pas obtenir de service, le projet ne peut pas continuer.
La capture d'écran du service de lancement officiel du site Web est la suivante:
Capture d'écran locale:
3. Processus de développement
1. Créez un nouveau projet et copiez le dossier JS dans le fichier Flexpaper (y compris flexpaper_flash_debug.js, flexpaper_flash.js, jquery.js, ces trois fichiers JS sont principalement des plug-ins pour les fichiers SWF de prévisualisation) vers le répertoire racine du site Web; Copiez FlexPaVerviewer.swf dans le répertoire root du site Web (le fichier est principalement utilisé comme un lecteur qui joue des fichiers SWF sur les pages Web). La structure du répertoire est la suivante:
Remarque: vous devez créer un dossier de téléchargement
2. Créer un fichier upload.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" <Html> <A-head> <meta http-equiv = "contenu-type" contenu = "text / html; charset = utf-8"> <ititle> document en ligne aperçu du système </ title> <style> body {margin-top: 100px; background: #fff; polit-family: verdana, tahoma;} a {colore: # ce4614;} # msgome;} a {couleur: # ce4614;} # msgome;} a {couleur: # ce4614;} # MSG;} a {Color: Color: # CE4614;} # MSG;} A {Color: 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" metheth = "post" enctype = "multipart / form-data" action = "docuploadconvert.jsp"> <v> Veuillez télécharger le fichier à être traité. Le processus peut prendre plusieurs minutes. Veuillez attendre un instant. </ div> <p> <entrée name = "file1" type = "file"> </p> <p> <input type = "soumi" name = "soumi" value = "upload"> </p> </ form> </div> </ body> </html> 3. Créez une page de conversion docuploadConvertAction.jsp
<% @ page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <% @ Page Import = "Java.io. *"%> <% @ Page Import = "Java.util.enumation"%> <% @ Page Import = "Com.oreilly.servlet.multipartreQuest" import = "com.oreilly.servlet.multiparpart.defaultFileRenamePolicy"%> <% @ page import = "com.cectsims.util.docconverter"%> <% @ page import = "com.cectsims.util.docConvert Le composant COS, qui peut être remplacé par le téléchargement Commons-Fileupload. Une fois le fichier téléchargé, enregistrez-le dans le dossier de téléchargement // Obtenez la chaîne de chemin de téléchargement de fichier SAVEDIRECTORY = application.getRealPath ("/") + "upload"; // Imprimez le Système d'information du chemin de téléchargement.out.println (SAVEDIRECTORY); // chaque fichier maximum 50m int maxPostSize = 50 * 1024 * 1024; // Utilisez la stratégie de dénomination par défaut de COS, Ajoutez 1, 2, 3 après le nom en double ... Si vous n'ajoutez pas de DFP et de nom en double, il écrasera DefaultFileReRamePolicy DFP = nouveau defaultFileReReNamePolicy (); // Le codage de la réponse est "UTF-8" et la stratégie de résolution de conflit de nom de fichier par défaut est utilisée pour implémenter le téléchargement. Si le nom DFP Duplicate n'est pas ajouté, le MultipartRequest sera écrasé. MultiMaReQuest Multi = New MultipartTrequest (Demande, SaveDirectory, MaxPostSize, "UTF-8", DFP); // MultiArtRequest Multi = new MultipartTReQuest (demande, SaveDirectory, MaxPostSize, "UTF-8"); // Sortie des informations d'informations sur les fichiers d'énumération = multi.getFileNames (); while (files.hasmoreElements ()) {System.err.println ("ccc"); String name = (String) files.nextElement (); Fichier f = multi.getFile (nom); if (f! = null) {String filename = multi.getFileSystemName (name); // obtient l'extension de la chaîne de fichiers téléchargée ExtName = filename.substring (filename.lastIndexof (".") + 1); // Fichier Full Path String LastFileName = SaveDirectory + "//" + FileName; // Obtenez le nom de fichier qui doit être converti et remplacez '/' dans le nom du chemin par '/' String converFileName = SaveDirectory.replaceAll ("////", "/") + "/" + filename; System.out.println (ConverFileName); // Appelez la classe de conversion DocConverter et passez le fichier à convertir au constructeur de cette classe DocConverter D = new DocConverter (ConverFileName); // Appelez la méthode Convert pour démarrer la conversion, exécutez d'abord doc2pdf () pour convertir le fichier Office en PDF; Exécutez ensuite PDF2SWF () pour convertir le PDF en SWF; D.Conver (); // la méthode de cellule getSwfPath () et imprimez le SWF Path System.out.out.out.print (d.getSwfpath ()); // Générez des chemins relatifs SWF pour passer à Flexpaper Player String swfpath = "upload" + d.getSwfpath (). Substring (d.getSwfpath (). LastIndexof ("/")); System.out.println (swfpath); // Mettez le chemin relatif dans session.setAttribute ("Swfpath", SWFPath); out.println ("Fichier Uploaded:" + LastFileName); out.println ("type de fichier" + extname); out.println ("<hr>"); }}%> <! Doctype html public "- // w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <a-head> <méta http-equiv = "contenu-type" contenu = "text! Charset = UTF-8 "> <Title> INSERT TITRE ICI </ Title> <ystyle> 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 = 'soumest' value = 'préview' class = 'bouton soumettre' /> </ form> </v> </body> </html> Créer la page Afficher 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> <ead> <meta http-equiv = "contenu-ype" content = "text / html; charset =" contenu-ype "contenu =" text / html; Charset = "contenu-type" contenu = "Text / HTML; <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> Media = "Screen"> html, corps {hauteur: 100%; } corps {marge: 0; rembourrage: 0; débordement: auto; } #flashContent {affichage: aucun; } </ style> <ititle> Document en ligne Système d'aperçu </title> </ head> <body> <div style = "position: absolue; Left: 50px; top: 10px;"> <a id = "Viewerplaceholder"> </a> <script type = text / javascrip Escape ('<% = swffilepath%>'), échelle: 0,6, zoomTransition: `` faciliter ', zoomtime: 0,5, zoomInterval: 0.2, fitPageOnload: true, fitwidthonload: false, complet, maxzaomsize: FALTSIVELOADING: FALSE, FALSE, INITVERVIE 'SinglePage', ViewModetoolsVisible: true, zoomtoolsvisible: true, navtoolsvisible: true, cursortoolsVisible: true, searchtoolsvisible: true, localChain: 'en_us'}}); </cript> </div> </ body> </html> 5. Créez la classe de conversion Docconverter.java
package com.cectsims.util; Importer java.io.BufferedInputStream; Importer java.io.file; Importer 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; / ** * Doc Docx Format Conversion * / public class DocConverter {private static final int fichier privé pdffile; fichier privé swffile; Fichier privé Docfile; public docConverter (String FileString) {Ini (FileString); } / ** * Réinitialiser le fichier * * @param filestring * / public void setFile (string filestring) {ini (filestring); } / ** * Initialize * * @param filestring * / private void ini (String FileString) {this.fileString = FileString; filename = filestring.substring (0, filestring.LastIndexof (".")); docfile = nouveau fichier (filestring); pdffile = nouveau fichier (nom de fichier + ".pdf"); swffile = nouveau fichier (nom de fichier + ".swf"); } / ** * Convertir en pdf * * @param fichier * / private void doc2pdf () lève exception {if (docfile.exists ()) {if (! Pdffile.exists ()) {openofficeConnection connection = new socketOpenOfficeConnection (8100); essayez {connection.connect (); DocumentConverter Converter = new OpenOfficeDocumentConverter (connexion); converter.convert (docfile, pdffile); // Fermez la connexion Connexion.disconnect (); System.out.println ("**** La conversion PDF est réussie, sortie PDF:" + pdffile.getPath () + "****"); } catch (java.net.connectException e) {e.printStackTrace (); System.out.println ("**** Exception du convertisseur SWF, le service OpenOffice n'a pas commencé! ****"); jeter e; } catch (com.artofsolving.jodConverter.OpenOffice.Connection.OpenOfficeException e) {E.PrintStackTrace (); System.out.println ("**** Exception du convertisseur SWF, Lire le fichier de conversion a échoué ****"); jeter e; } catch (exception e) {e.printStackTrace (); jeter e; }} else {System.out.println ("**** a été converti en PDF, aucune conversion n'est requise ****"); }} else {System.out.println ("**** SWF Convertisseur Exception, le document qui doit être converti n'existe pas et ne peut pas être converti ****"); }} / ** * Convertir en swf * / @suppresswarnings ("inutilisé") private void pdf2swf () lève l'exception {runtime r = runtime.getRuntime (); if (! swffile.exists ()) {if (pdffile.exists ()) {if (Environment == 1) {// Windows Environment Processing Try {process p = r.exec ("d: / programme files / swftools / pdf2swf.exe" + pdffile.getpath () + "-o" + swffile.getpath () + "-t n 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 est réussie, sortie de fichier:" + swffile.getPath () + "****"); if (pdffile.exists ()) {pdffile.delete (); }} catch (ioException e) {e.printStackTrace (); jeter e; }} else if (Environment == 2) {// Linux Environment Processing 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 est réussie, sortie de fichier:" + swffile.getPath () + "****"); if (pdffile.exists ()) {pdffile.delete (); }} catch (exception e) {e.printStackTrace (); jeter e; }}} else {System.out.println ("**** pdf n'existe pas, ne peut pas être converti ****"); }} else {System.out.println ("**** SWF existe déjà et n'a pas besoin de convertir ****"); }} Static String LoadStream (InputStream in) lève ioException {int ptr = 0; in = new BufferedInputStream (in); StringBuffer Buffer = new StringBuffer (); while ((ptr = in.read ())! = -1) {buffer.append ((char) ptr); } return buffer.toString (); } / ** * convertir la méthode principale * / @suppresswarnings ("inutilisé") public booléen convert () {if (swffile.exists ()) {System.out.println ("**** convertisseur SWF commence à fonctionner, le fichier a été converti en swf ****"); Retour Vrai; } if (Environment == 1) {System.out.println ("**** SWF Convertisseur commence à fonctionner, l'environnement en cours d'exécution Windows ****"); } else {System.out.println ("**** Le convertisseur SWF commence à fonctionner, l'environnement de course actuel Linux ****"); } essayez {doc2pdf (); pdf2swf (); } catch (exception e) {e.printStackTrace (); retourne false; } if (swffile.exists ()) {return true; } else {return false; }} / ** * Retour Path du fichier * * @param s * / public String getSwfPath () {if (swffile.exists ()) {String temppstring = swffile.getPath (); Tempstring = tempsstring.replaceALL ("/////", "/"); retour à la température; } else {return ""; }} / ** * Définissez 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 ()) == '/') {Swffile = new File (OutputPath + realName + ".swf"); } else {swffile = nouveau fichier (outputPath + realName + ".swf"); }}}}6. Déploiement et libération
Démarrer Tomcat et déployer l'application Web actuelle
Entrez http: // localhost: 8080 / ctcesims / documentUpload.jsp dans la barre d'adresse comme indiqué ci-dessous:
Cliquez sur le bouton Aperçu et une interface d'aperçu sera générée, comme indiqué dans la figure ci-dessous:
4. Questions fréquemment posées
Si SWF apparaît, vous ne pouvez pas le prévisualiser, veuillez visiter
http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html#119065
Définissez le dossier où SWFS est généré comme l'emplacement du fichier de confiance.
Ce qui suit donne la différence entre Flexpaper 2.1.9: La méthode d'initialisation est modifiée. Si le répertoire de fichiers n'est pas avec le répertoire du projet, le répertoire de pièce jointe peut être défini en tant que répertoire virtuel du serveur.
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <% // String swffilePath = session.getAttribute ("Swfpath"). "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" text / html; charset = utf-8 "> <script type =" text / javascript "src =" js / jQuery.Min.js "> </ script> src =" js / jQuery.Min.js "> </ script> src =" js / jQuery.min.Min. 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%; } corps {marge: 0; rembourrage: 0; débordement: auto; } #flashContent {affichage: aucun; } </ style> <Title> Document Online Preview System </Title> </ head> <body> <div style = "position: Absolute; Left: 50px; top: 10px;"> <div id = "documentViewer"> </div> <script type = "text / javascript"> var startDocument = "Paper"; $ ('# DocumentViewer'). FlexPaVerviewer ({config: {swffile: 'upload / ddd3.swf', échelle: 0.6, zoomtransition: 'faceout', zoomtime: 0.5, zoomInterval: 0.2, fitpageonload, true, fitwidthonload: false, fullasmaxwindow: false, progressiveling: false, false, intrigue: 0,2, 0,2 MaxzoomSize: 5, Searchmatchall: False, initViewMode: 'Portrait', RendaringOrder: 'Flash', startAtPage: '', ViewModetoolsVisible: true, zoomtoolsvisible: true, NavtoolsVisible: 'cursortoolsvisible:' searchtoolsvisible: true, wMode: 'Window </cript> </div> </ body> </html> Enfin, si vous devez supprimer la fonction d'impression et le logo, vous pouvez recompiler le fichier flash de Flexpaper et le télécharger en ligne.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.