English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Este artículo introduce la implementación de la vista previa de archivos adjuntos en Java, que requiere openoffice, SWFTools, FlexPaper, y los pasos específicos son los siguientes:
1Resumen
Principio principal
1Convierte archivos word, excel, ppt, txt, etc. a archivos pdf utilizando herramientas de terceros como OpenOffice
2Convierte archivos pdf a formato swf utilizando SWFTools
3Muestra en la página web mediante el componente de documento FlexPaper
2Descarga del paquete de instalación
1OpenOffice es un software de procesamiento de texto gratuito y de código abierto bajo Apache
Dirección de descarga: Descarga de la página web oficial de Apache OpenOffice Versión-3.4.1 http://www.openoffice.org/zh-cn/download/
2SWFTools es un paquete de herramientas para procesar archivos swf de Flash, lo utilizamos para convertir archivos pdf a swf
Dirección de descarga: Descarga de la página web oficial de SWFTools swftools-2013-04-09-1007.exe http://www.swftools.org/download.html
3FlexPaper es un componente de código abierto y ligero que permite mostrar varios tipos de documentos en el navegador
Dirección de descarga: Descarga de la página web oficial de FlexPaper Versión1.5.1 https://flowpaper.com/download/
4JODConverter es un convertidor de archivos OpenDocument en Java, solo utilizamos su archivo jar aquí
Dirección de descarga: Descarga de JODCConverter https://sourceforge.net/projects/jodconverter/files/
3Archivos de instalación
1Instala los archivos descargados (excepto JODConverter), el directorio puede ser el que tú elijas. Es importante notar que después de instalar openoffice, cuando lo usamos, debemos abrir su servicio. En este caso, necesitamos abrirlo mediante comando:
Abre la ventana de DOS, navega al directorio del disco de instalación de openoffice e ingresa el siguiente código para iniciar el servicio:
soffice -sin interfaz -accept="socket,host=127.0.0.1,puerto=8100;urp;" -nofirststartwizard
Atención, no escriba mal el ‘—' antes del último comando! Si el servicio no se inicia, el proyecto no puede continuar.
Captura de pantalla de inicio de servicio en el sitio web oficial como se muestra a continuación:
Captura de pantalla local:
3.Desarrollo
1.Crear un nuevo proyecto, copie la carpeta js del archivo flexpaper (que contiene flexpaper_flash_debug.js, flexpaper_flash.js, jquery.js, estos archivos js son complementos para previsualizar archivos swf) al directorio raíz del sitio; copie FlexPaperViewer.swf al directorio raíz del sitio (este archivo se utiliza principalmente para reproducir archivos swf en páginas web), la estructura del directorio se muestra en la imagen siguiente:
Nota: es necesario crear la carpeta upload
2.Crear 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"> Por favor, suba el archivo que desea procesar, el proceso puede llevar varios minutos, espere un momento. </div> <p> <input name="file1" type="file"> </p> <p> <input type="submit" name="Submit" value="Subir"> </p> </form > </div> </body> </html>
3.Crear la página de conversión 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"%> <% //La subida de archivos utiliza el componente cos, se puede cambiar por commons-Subida de archivos fileupload, después de la subida del archivo, se guardará en la carpeta upload //Obtener la ruta de subida de archivos String saveDirectory = application.getRealPath("/")+"upload"; //Imprime información de la ruta de carga System.out.println(saveDirectory); //tamaño máximo de cada archivo50m int maxPostSize = 50 * 1024 * 1024 ; //Adopta la estrategia de nombre predeterminada de cos, agrega1,2,3...si no se especifica dfp renombrará el archivo DefaultFileRenamePolicy dfp = new DefaultFileRenamePolicy(); //La codificación de response es "UTF-8, adopta la estrategia predeterminada de resolución de conflictos de nombres de archivos, realiza la carga, si no se especifica dfp renombrará el archivo MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8 //MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8"); //Muestra información de retroalimentación 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); //Obtiene la extensión del archivo subido String extName=fileName.substring(fileName.lastIndexOf(".")+1); //Ruta completa del archivo String lastFileName= saveDirectory+"\\" + fileName; //Obtiene el nombre del archivo a convertir, reemplaza '\\' en el nombre de la ruta con'/' String converfilename = saveDirectory.replaceAll("\\\\", "/")+"/"+fileName; System.out.println(converfilename); //Llama a la clase de conversión DocConverter y pasa el archivo a convertir al método constructor de la clase DocConverter d = new DocConverter(converfilename); //Llama al método conver para comenzar la conversión, primero ejecuta doc2pdf() convierte archivos office a pdf; luego ejecuta 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.Crear la clase de conversión 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; /** * Conversión de formato doc docx */ public class DocConverter { private static final int environment = 1;// Ambiente 1:windows 2:linux private String fileString;// (solo implica pdf2Problemas de ruta de swf) private String outputPath = "";// La ruta de entrada, si no se configura, se salida en la ubicación predeterminada private String fileName; private File pdfFile; private File swfFile; private File docFile; public DocConverter(String fileString) { ini(fileString); } /** * Reconfigurar file * * @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 = new File(fileString); pdfFile = new File(fileName + ".pdf"); swfFile = new File(fileName + ".swf"); } /** * Convertir a 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); // cerrar la conexión connection.disconnect(); System.out.println("****¡Conversión PDF exitosa, salida PDF: " + pdfFile.getPath()+ "****"); } catch (java.net.ConnectException e) { e.printStackTrace(); System.out.println("****¡Excepción del convertidor SWF, el servicio OpenOffice no se ha iniciado!****"); throw e; catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) { e.printStackTrace(); System.out.println("****excepción del convertidor SWF, fallo al leer el archivo de conversión****"); throw e; } catch (Exception e) { e.printStackTrace(); throw e; } } else { System.out.println("****ya convertido a PDF, no es necesario realizar la conversión****"); } } else { System.out.println("****excepción del convertidor SWF, el documento a convertir no existe, no se puede convertir****"); } } /** * convertir a swf */ @SuppressWarnings("unused") private void pdf2swf() throws Exception { Runtime r = Runtime.getRuntime(); if (!swfFile.exists()) { if (pdfFile.exists()) { if (environment == 1) {// manejo en entorno 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("****conversión SWF exitosa, archivo de salida: " + swfFile.getPath() + "****"); if (pdfFile.exists()) { pdfFile.delete(); } } catch (IOException e) { e.printStackTrace(); throw e; } } else if (environment == 2) {// manejo en entorno 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("****conversión SWF exitosa, archivo de salida: " + swfFile.getPath() + "****"); if (pdfFile.exists()) { pdfFile.delete(); } } catch (Exception e) { e.printStackTrace(); throw e; } } } else { System.out.println("****el archivo PDF no existe, no se puede convertir****"); } } else { System.out.println("****el SWF ya existe, no es necesario 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étodo principal de conversión */ @SuppressWarnings("unused") public boolean conver() { if (swfFile.exists()) { System.out.println("****el convertidor SWF comienza a trabajar, el archivo se ha convertido a SWF****"); return true; } if (environment == 1) { System.out.println("****El convertidor swf comienza a trabajar, el entorno de ejecución actual es windows****"); } else { System.out.println("****El convertidor swf comienza a trabajar, el entorno de ejecución actual es linux****"); } try { doc2pdf(); pdf2swf(); } catch (Exception e) { e.printStackTrace(); return false; } if (swfFile.exists()) { return true; } else { return false; } } /** * Devuelve la ruta del archivo * * @param s */ public String getswfPath() { if (swfFile.exists()) { String tempString = swfFile.getPath(); tempString = tempString.replaceAll("\\\\", "/"); return tempString; } else { return ""; } } /** * Configurar 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() - 1) == '/') { swfFile = new File(outputPath + realName + ".swf"); } else { swfFile = new File(outputPath + realName + ".swf"); } } } }
6.Despliegue de publicación
Inicie Tomcat, despliegue la aplicación web actual
Ingrese la dirección en la barra de direccioneshttp://localhost:8080/ctcesims/documentUpload.jsp Como se muestra a continuación:
Haga clic en el botón de previsualización, se generará la interfaz de previsualización, como se muestra a continuación:
4.Preguntas frecuentes
Si no puede previsualizar el archivo swf, visite
http://www.macromedia.com/soporte/documentación/en/flashplayer/ayuda/settings_manager04a.html#119065
Establezca la carpeta donde se generan los archivos swf como ubicación de archivo de confianza.
A continuación se proporciona 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>
Por último, si necesita eliminar la función de impresión y el logo, puede recompilar el archivo flash de flexpaper, también hay descargas en línea
Esto es todo el contenido de este artículo, espero que sea útil para su aprendizaje y que todos apoyen el tutorial de alarido.
Declaración: el contenido de este artículo se ha obtenido de la red, es propiedad del autor original, el contenido se ha contribuido y subido por los usuarios de Internet, este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.