Este artículo presenta principalmente la implementación de Java de la vista previa del archivo adjunto, que requiere OpenOffice, SWFTOols y FlexPaper. Los pasos específicos son los siguientes:
1. Descripción general
Principios principales
1. Convertir Word, Excel, PPT, TXT y otros archivos en archivos PDF a través de la herramienta de terceros OpenOffice
2. Convertir el archivo PDF en el archivo de formato SWF a través de SWFTOOLS
3. Muestra en la página a través del componente del documento del papel flexible
2. Descargue el paquete de instalación
1. OpenOffice es un software de procesamiento de palabras abierto y gratuito en Apache
Dirección de descarga: Apache OppenOffice Sitio web oficial Descargar Versión - 3.4.1 http://www.openoffice.org/zh-cn/download/
2. Swftools es un conjunto de kits de herramientas utilizados para procesar archivos SWF de flash. ¡Lo usamos para convertir archivos PDF en archivos SWF!
Dirección de descarga: Sitio web oficial de SWFTOOLS Descargar swftools-2013-04-09-1007.exe http://www.swftools.org/download.html
3.flexpaper es un componente liviano de código abierto que muestra varios documentos en el navegador.
Dirección de descarga: Sitio web oficial de FlexPaper Descargar Versión 1.5.1 https://flowpaper.com/download/
4.JodConverter Un convertidor de archivo de OpenDocument Java, donde solo usamos su paquete JAR
Dirección de descarga: JodcConverter Descargar https://sourceforge.net/projects/jodconverter/files/
3. Instale el archivo
1. Instale el archivo descargado (excepto JodConverter), ¡y la letra de la unidad se puede configurar como desee! Cabe señalar que después de completar la instalación de OpenOffice, cuando lo usamos, necesitamos abrir su servicio. Entonces necesitamos abrirlo en el comando:
Abra la ventana DOS, ingrese la letra de la unidad de instalación de OpenOffice e ingrese el siguiente código para iniciar el servicio:
Software -headless -accept = "socket, host = 127.0.0.1, puerto = 8100; urp;" -NOFIRSTSTAartWizard
Presta atención al '-' frente al último comando, ¡no lo escribas mal! Si no puede obtener un servicio, el proyecto no puede continuar.
La captura de pantalla del servicio oficial de lanzamiento del sitio web es el siguiente:
Captura de pantalla local:
3. Proceso de desarrollo
1. Cree un nuevo proyecto y copie la carpeta JS en el archivo FlexPaper (incluido FlexPaper_Flash_debug.js, FlexPaper_flash.js, jQuery.js, estos tres archivos JS son principalmente complementos para los archivos SWF de vista previa) en el directorio raíz del sitio web; Copie FlexPaperviewer.swf en el directorio root del sitio web (el archivo se usa principalmente como un reproductor que reproduce archivos SWF en las páginas web). La estructura del directorio es la siguiente:
Nota: debe crear una carpeta de carga
2. Cree fileUpload.jsp
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" PageEncoding = "utf-8"%> <! DocType html public "-// w3c // dtd html 4.01 transición // en" "http://www.w3.org/tr/html4/loos.dttd <html> <fead> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> Document Online Preview System </title> <style> Body {margin-top: 100px; Background: #fff; Font-Family: Verdana, Tahoma;} A {Color:#CE4614; #CE4614; Font-size: 0.9em; Text-Align: Center;} #msg-box .logo {border-bottom: 5px sólido #ece5d9; margen-bottom: 20px; padding-bottom: 10px;} #msg-box .title {font-size: 1.4em; font-weight: negr. {margin-top: 20px;} </style> </head> <body> <div id = "msg-box"> <form name = "form1" método = "post" enctype = "multipart/form-data" action = "docuploadConvertaction.jsp"> <div> Por favor, cargue el archivo que se procese. El proceso puede tomar varios minutos. Por favor espere un momento. </div> <p> <input name = "file1" type = "file"> </p> <p> <input type = "subt" name = "subt" value = "cargar"> </p> </form> </div> </body> </html> 3. Cree una página de conversión DOCUPLOADCONESTACTION.JSP
<%@page lenguaje = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@page import = "java.io.*"%> <%@page import = "java.util.enumeration"%> <%@page import = "com.oreilly.servlet.multiparTequest import = "com.oreilly.servlet.multipart.defaultFilerenamePolicy"%> <%@page import = "com.cectsims.util.docconverter"%> <%@page import = "com.cectsims.util.docconverter"%> <%@page import = "com.cectsims.util.docconverter"%> <% / / / / / /fila El componente COS, que se puede reemplazar con carga de archivo comunes. Después de cargar el archivo, guárdelo en la carpeta de carga // Obtenga la ruta de carga de archivo String Savedirectory = Application.getRealPath ("/")+"Cargar"; // Imprima la ruta de carga System.out.println (SaveDirectory); // cada archivo máximo 50m int maxPostSize = 50 * 1024 * 1024; // Use la estrategia de nomenclatura predeterminada de COS, Agregar 1, 2, 3 después del nombre duplicado ... Si no agrega DFP y el nombre duplicado, sobrescribirá defaultFilerenamePolicy DFP = new DefaultFilerenamePolicy (); // La codificación de la respuesta es "UTF-8", y la estrategia de resolución de conflicto de nombre de nombre predeterminada se utiliza para implementar la carga. Si no se agrega el nombre de duplicado DFP, se sobrescribirá el MultipRequest se sobrescribirá. MultipRequest múltiple = nuevo multiparTrequest (solicitud, saveDirectory, maxPostSize, "UTF-8", DFP); // multiCuamente múltiple = nuevo multiparTruquest (request, saveDirectory, maxPostSize, "UTF-8"); // Archivos de enumeración de información de retroalimentación = multi.getFileNames (); while (files.hasmoreelements ()) {system.err.println ("ccc"); Name de cadena = (string) files.nextelement (); Archivo f = multi.getFile (nombre); if (f! = null) {string filename = multi.getFileSystemName (nombre); // Obtenga la extensión de la cadena de archivo cargado extname = FileName.Substring (FileName.lastIndexOf (".")+1); // Archivo String de ruta completa LastFileName = SaveDirectory + "//" + FileName; // Obtenga el nombre del archivo que debe convertirse y reemplazar '/' en el nombre de ruta con '/' String converFileName = saveDirectory.replaceall ("////", "/")+"/"+FileName; System.out.println (converfileName); // Llame a la clase de conversión DocConverter y pase el archivo para convertir al constructor de esta clase DocConverter d = New DocConverter (converfileName); // Llame al método Convertir para iniciar la conversión, primero ejecute doc2pdf () para convertir el archivo de oficina en PDF; luego ejecute PDF2SWF () para convertir el PDF a SWF; d.conver (); // Método Cell getSwfPath () e imprima la ruta de archivo SWF convertida System.out.println (d.getswfpath ()); // Generar rutas relativas SWF para pasar a la cadena de reproductor FlexPaper swfpath = "cargar"+d.getswfpath (). Sustring (d.getswfpath (). DastIndexof ("/")); System.out.println (SWFPath); // Ponga la ruta relativa en session.SetAttribute ("SWFPath", SWFPath); out.println ("Archivo cargado:"+LastFileName); out.println ("Tipo de archivo"+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-Exiv = "Content-Type" Content = ""; charset = utf-8 "> <title> Inserte el título aquí </title> <style> Body {margin-top: 100px; fondos: #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 sólido #ece5d9; margen-bottom: 20px; padding-bottom: 10px;} #msg-box .title {font-size: 1.4em; font-weight: negr. {margin-top: 20px;} </style> </head> <body> <div> <form de nombre = "verform" id = "form_swf" action = "documentView.jsp" método = "post"> <input type = 'shit' value = 'preview' class = 'button Subt'/> </form> </div> </body> </html> Crear vista Página DocumentView.jsp
<%@ page lenguaje = "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-oquiv = "content-type" contenido = "text/htm; <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> <script> <syle = "text/" text/"text/" text " medios = "pantalla"> html, cuerpo {altura: 100%; } cuerpo {margen: 0; relleno: 0; desbordamiento: auto; } #FlashContent {Display: None; } </style> <title> Documento del sistema de vista previa en línea </title> </head> <body> <div style = "Position: Absolute; Left: 50px; Top: 10px;"> <a id = "ViewerplacePlayholder"> </a> <script type = "text/javascript"> var fp = newffpapererviewer ('flexpapererviewer', 'viewerplace placePlace' {{{{newffffuffufffice {newffff Flex {niewffffeL Escape ('<%= swffilePath%>'), escala: 0.6, zoomTransition: 'facilyOut', zoomTime: 0.5, zoomInterval: 0.2, fitPageOnload: true, fitWidThonLoad: false, fullScreenMaxwindow: falso, progresoviVEliDing: false, minZoomSize: 0.2, maxzoomSize: 5, searchmatchall: FALSE, FALSE, FALSO, FALSO, FALSO: FALSO: FALSE, MINZOOMSIZE: 0.2, MAXZOOMSIZE: 5, Searchmatchall: FALSE, FALSE, FALSE, FALSO, FALSO, FALSO: FALSO, FALSE, MINZOOMSIZ 'SinglePage', ViewModeToLSVisible: True, ZoomToolsVisible: True, NavToolsVisible: True, CurSortoLSVisible: True, SearchToolSVisible: True, LocalEpain: 'en_us'}}); </script> </div> </body> </html> 5. Cree la clase de conversión DocConverter.java
paquete 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.socketopenOfficiConnection; import com.artofsolving.jodconverter.openoffice.converter.openoffateCumentConverter; / *** Conversión de formato DOC DocX*/ public class DocConverter {private static final int entorno = 1; // entorno 1: Windows 2: Linux private String filestring; // (solo implica problemas de ruta pdf2swf) string private stiting outpath = ""; // ruta de entrada, si no se establece, la salida está en la ubicación predeterminada de la cadena privada FileName; archivo privado pdffile; archivo privado swffile; Archivo privado docfile; public DocConverter (String fileString) {ini (fileString); } / ** * Restablecer archivo * * @param filestring * / public void setFile (string fileString) {ini (fileString); } / ** * Inicializar * * @param filestring * / private void ini (string fileString) {this.filestring = fileString; filename = fileString.Substring (0, filestring.lastIndexOf (".")); docfile = nuevo archivo (filtración); pdffile = nuevo archivo (nombre de archivo + ".pdf"); swffile = nuevo archivo (nombre de archivo + ".swf"); } / ** * Convertir a pdf * * @param archivo * / private void doc2pdf () lanza excepción {if (docfile.exists ()) {if (! Pdffile.exists ()) {OpenOfficeConnection Connection = new SocketopenOfficiConnection (8100); intente {Connection.Connect (); DocumentConverter Converter = new OpenOffateCumentConverter (conexión); convertidor.convert (docfile, pdffile); // cierre la conexión Connection.Disconnect (); System.out.println ("**** La conversión PDF es exitosa, salida PDF:" + pdffile.getPath () + "****"); } catch (java.net.connectexception e) {E.PrintStackTrace (); System.out.println ("**** Excepción del convertidor SWF, OpenOffice Service no ha comenzado! ****"); tirar E; } Catch (com.artofsolving.jodconverter.openoffice.connection.openofficeException e) {E.PrintStackTrace (); System.out.println ("**** Excepción del convertidor SWF, leer el archivo de conversión falló ****"); tirar E; } catch (Exception e) {E.PrintStackTrace (); tirar E; }} else {System.out.println ("**** se ha convertido a PDF, no se requiere conversión ****"); }} else {System.out.println ("**** Excepción del convertidor SWF, el documento que debe convertirse no existe, y no se puede convertir ****"); }} / ** * Convertir a SWF * / @SupplessWarnings ("no usado") privado void pdf2swf () arroja excepción {runtime r = runtime.getRuntime (); if (? System.out.print (loadstream (p.getInputStream ())); System.err.print (LoadStream (p.getErrorStream ())); System.out.print (loadstream (p.getInputStream ())); System.err.println ("**** La conversión SWF es exitosa, salida de archivo:" + swffile.getPath () + "****"); if (pdffile.exists ()) {pdffile.delete (); }} catch (ioException e) {E.PrintStackTrace (); tirar E; }} else if (ambiente == 2) {// Procesamiento de entorno Linux Prueba {proceso 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 conversión SWF es exitosa, salida de archivo:" + swffile.getPath () + "****"); if (pdffile.exists ()) {pdffile.delete (); }} catch (Exception e) {E.PrintStackTrace (); tirar E; }}} else {System.out.println ("**** PDF no existe, no se puede convertir ****"); }} else {System.out.println ("**** SWF ya existe y no necesita convertir ****"); }} static string loadStream (inputStream in) lanza 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 el método principal* / @SupessWarnings ("no usado") public boolean Convert () {if (swffile.exists ()) {system.out.println ("**** converter swf comienza a funcionar, el archivo se ha convertido a swf ****"); devolver verdadero; } if (ambiente == 1) {System.out.println ("**** El convertidor SWF comienza a funcionar, el entorno ejecutivo actual Windows ****"); } else {System.out.println ("**** SWF Converter comienza a funcionar, el entorno de ejecución actual Linux ****"); } try {doc2pdf (); pdf2swf (); } catch (Exception e) {E.PrintStackTrace (); devolver falso; } if (swffile.exists ()) {return true; } else {return false; }} / ** * return File Path * * @param s * / public string getSwfpath () {if (swffile.exists ()) {string temptring = swffile.getPath (); temptring = temptring.replaceall ("////", "/"); return temptrtring; } else {return ""; }} / *** Establezca la ruta de salida* / 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 = nuevo archivo (outputPath + realName + ".swf"); }}}}6. Implementación y lanzamiento
Iniciar Tomcat e implementar la aplicación web actual
Ingrese http: // localhost: 8080/ctcesims/documentupload.jsp en la barra de direcciones como se muestra a continuación:
Haga clic en el botón Vista previa y se generará una interfaz de vista previa, como se muestra en la figura a continuación:
4. Preguntas frecuentes
Si aparece SWF, no puede verlo, visite
http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html#119065
Establezca la carpeta donde se genera SWFS como la ubicación del archivo de confianza.
Lo siguiente da la diferencia entre FlexPaper 2.1.9: se cambia el método de inicialización. Si el directorio de archivos no está junto con el directorio del proyecto, el directorio de archivos adjuntos se puede establecer como un directorio virtual en el servidor.
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%// String swffilePath = session.getAttribute ("swfpath"). toString ();%> < "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 " type = "text/javascript" src = "js/flexpaper.js"> </script> <script type = "text/javascript" src = "js/flexpaper_handlers.js"> </script> <style type = "text/css" medios = "pantalla"> html, cuerpo {altura: 100%; } cuerpo {margen: 0; relleno: 0; desbordamiento: auto; } #FlashContent {Display: None; } </style> <title> Documento del sistema de vista previa en línea </title> </head> <body> <div style = "Position: Absolute; izquierda: 50px; top: 10px;"> <div id = "documentViewer"> </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: 'Retritit', RendereringOrder: 'flash', startAtPage: '', ViewModeToLSVISIBLE: true, zoomtoolsVisible: true, navtoolsvisible: true, cursortoolsVisible: true, searchToolSVisible: true, wmode: window ',', ',', ',', '', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', vential '. }}); </script> </div> </body> </html> Finalmente, si necesita eliminar la función de impresión y el logotipo, puede recompilar el archivo flash de FlexPaper y descargarlo en línea.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.