Este artigo apresenta principalmente a implementação Java da visualização de anexos, que requer o OpenOffice, Swftools e Flexpaper. As etapas específicas são as seguintes:
1. Visão geral
Princípios principais
1. Converter Word, Excel, PPT, TXT e outros arquivos em arquivos PDF através de uma ferramenta de terceiros OpenOffice
2. Converta o arquivo PDF em arquivo de formato SWF através de Swftools
3. Exibir na página através do componente do documento Flexpaper
2. Faça o download do pacote de instalação
1.EnOffice é um software de processamento de texto aberto e gratuito em Apache
Download Endereço: Apache OppeNOffice Official Site download Versão - 3.4.1 http://www.openoffice.org/zh-cn/download/
2. Swftools é um conjunto de kits de ferramentas usados para processar arquivos SWF do flash. Usamos para converter arquivos PDF em arquivos SWF!
Endereço para download: swftools site oficial download swftools-2013-04-09-1007.exe http://www.swftools.org/download.html
3.Flexpaper é um componente leve de código aberto que exibe vários documentos no navegador.
Download Endereço: Flexpaper Site oficial Download Versão 1.5.1 https://flowpaper.com/download/
4.JodConverter Um conversor de arquivo Java Opendocument, onde usamos apenas seu pacote JAR
Download Endereço: JodcConverter Download https://sourceforge.net/projects/jodconverter/files/
3. Instale o arquivo
1. Instale o arquivo baixado (exceto JodConverter), e a letra da unidade pode ser definida como você deseja! Deve -se notar que, após a conclusão da instalação do OpenOffice, quando o usarmos, precisamos abrir seu serviço. Então precisamos abri -lo no comando:
Abra a janela DOS, digite a letra de unidade de instalação do OpenOffice e digite o código a seguir para iniciar o serviço:
Software -sem cabeça -Acept = "Socket, host = 127.0.0.1, porta = 8100; URP;" -NofirststartWizard
Preste atenção ao '-' na frente do último comando, não escreva errado! Se você não conseguir um serviço, o projeto não poderá continuar.
A captura de tela do serviço de lançamento oficial do site é a seguinte:
Captura de tela local:
3. Processo de desenvolvimento
1. Crie um novo projeto e copie a pasta JS no arquivo Flexpaper (incluindo flexpaper_flash_debug.js, flexpaper_flash.js, jquery.js, esses três arquivos JS são principalmente plug-ins para visualizar arquivos SWF) para o diretório raiz do site; Copie o FlexPaperViewer.swf para o diretório raiz do site (o arquivo é usado principalmente como um jogador que reproduz arquivos SWF nas páginas da web). A estrutura do diretório é a seguinte:
Nota: você precisa criar uma pasta de upload
2. Crie fileUpload.jsp
<%@ página linguagem = "java" contentType = "text/html; charset = utf-8" PageEncoding = "utf-8"%> <! <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> document online visualize sistema </title> <estilo> body {margin-top: 100px; background: #fff; fontilily: cere4; #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 0: Bold; Bold; Msg-Box .Title {Font-Size: 1.4em; {margin-top: 20px;} </style> </head> <body> <div id = "msg-box"> <nome name = "form1" method = "post" rtype = "multipart/form-data" action = "docuploadConvertion.jsp"> <div> envie o arquivo a ser processado. O processo pode levar alguns minutos. Por favor, espere um momento. </div> <p> <input name = "file1" type = "file"> </p> <p> <input type = "submit" name = "submit" value = "upload"> </p> </morm> </div> </body> </html> 3. Crie uma página de conversão docuploadConvertaction.jsp
<%@página linguagem = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@página import = "java.io.*"%> <%@página import = "java.util.enumeration"%> <%@import = "com.ore.ore.orel.orel.oreil. import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%> <%@page import="com.cectsims.util.DocConverter"%> <%@page import="com.cectsims.util.DocConverter"%> <%@page import="com.cectsims.util.DocConverter"%> <% //File upload is uploaded using O componente COS, que pode ser substituído pelo upload do Commons-FileUpload. Depois que o arquivo for enviado, salve -o na pasta de upload // Obtenha o caminho do arquivo de upload string Savedirectory = Application.getRealPath ("/")+"upload"; // imprima o Sistema de Informações sobre o Caminho de Upload.println (SaveDirectory); // cada arquivo máximo 50m int maxpostSize = 50 * 1024 * 1024; // Use a estratégia de nomeação padrão de COS, adicione 1, 2, 3 após o nome duplicado ... se você não adicionar DFP e duplicar o nome, ele substituirá o DefaultFileRenamepolicy DFP = novo DefaultFileRenamepolicy (); // A codificação da resposta é "UTF-8", e a estratégia de resolução de conflitos do nome do arquivo padrão é usada para implementar o upload. Se o nome duplicado do DFP não for adicionado, o multipartrequest será substituído. Multi Multi = novo multipartreCest (solicitação, Savedirectory, Maxpostize, "UTF-8", DFP); // multi-multi = novo multipartreCest (solicitação, SAVEDirectory, MaxpostSize, "UTF-8"); // Feedback de feedback de saída Arquivos de enumeração = multi.getFileNames (); while (files.hasMoreElements ()) {System.err.println ("ccc"); String name = (string) arquivos.nextElement (); Arquivo f = multi.getFile (nome); if (f! = null) {string filename = multi.getFilesystemName (nome); // Obtenha a extensão do arquivo carregado string extName = filename.substring (filename.lastIndexof (".")+1); // Arquivo Path Full Path String lastFileName = Savedirectory + "//" + FileName; // Obtenha o nome do arquivo que precisa ser convertido e substitua '/' no nome do caminho com '/' string converfileName = savedirectory.replaceall ("////", "/")+"/"+filename; System.out.println (converfilename); // Ligue para a classe de conversão DocConverter e passe o arquivo para ser convertido para o construtor desta classe docconverter d = new DocConverter (converfileName); // Ligue para o método Convert para iniciar a conversão, primeiro execute doc2pdf () para converter o arquivo do escritório em pdf; Em seguida, execute pdf2swf () para converter o PDF em SWF; d.conver (); // Cell GetswfPath () Método e imprima o Sistema de Caminho de Arquivos SWF convertido.out.println (d.getswfpath ()); // gerar caminhos relativos SWF para passar para o Flexpaper Player string swfpath = "upload"+d.getswfpath (). Substring (d.getswfpath (). LastindexOf ("/")); System.out.println (swfpath); // coloque o caminho relativo em session.setAttribute ("swfpath", swfpath); out.println ("Arquivo carregado:"+lastFileName); out.println ("Tipo de arquivo"+extName); out.println ("<HR>"); }} %> <! Doctype html public "-// w3c // dtd html 4.01 transitória // pt" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <tera tEENTP-ENTSP-SENTENT = " charset = utf-8 "> <title> Insira o título aqui </title> <estilo> corpo {margin-top: 100px; fundo: #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 0: Bold; Bold; Msg-Box .Title {Font-Size: 1.4em; {margin-top:20px;} </style> </head> <body> <div> <form name="viewForm" id="form_swf" action="documentView.jsp" method="POST"> <input type='submit' value='Preview' class='BUTTON SUBMIT'/> </form> </div> </body> </html> Criar View Page DocumentView.jsp
<%@ página de página = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%string swffilepath = session.getAttribute ("swfpath"). tostring (); %> <! Doctype html public "-// w3c // dtd html 4.01 transitória // pt" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv = contents = " <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/flexão type = "text/css" mídia = "tela"> html, corpo {altura: 100%; } corpo {margem: 0; preenchimento: 0; Overflow: Auto; } #flashContent {display: Nenhum; } </style> <title> Documentar o sistema de visualização on -line </ititle> </ad Head> <body> <div style = "posição: absoluto; esquerda: 50px; top: 10px;"> <a id = "viewerplaceholder"> </a> <script type = "text/javascript"> var fp = newPerPerPerTew, 'FLEXPERVIGN (FlexPerView = " Escape ('<%= swffilepath%>'), escala: 0,6, zoomtransition: 'Deseaseout', ZoomTime: 0.5, ZoomInterval: 0.2, FitPageOnLoad: true, fitWidthonLoad: false, 0xzAxAxWIndiaw: FalseIlOAding: FalsemMeSize: 0.2, manchEnMaxWindOw: Falseiato: MINZOMSIZE: 0.2, manchemx, manchEnMaxwindrow: Falseiato: MINZOMSIZE: 0.2, manchemx, manchEnToom: FalsenOamOling: MinZoomSize: 0xz, manchenasMaxWindow: FalseIloAling: 'Singlepage', ViewModeToolsVisible: True, ZoomToolsVisible: True, NavToolsvisible: True, Cursortoolsvisible: True, SearchToolsVisible: True, Localechain: 'En_us'}}); </script> </div> </body> </html> 5. Crie a classe de conversão docconverter.java
pacote com.cectSims.util; importar java.io.bufferInputStream; importar java.io.file; importar java.io.ioException; importar 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 Conversão*/ public class DocConverter {private Static final int ambiente = 1; // Ambiente 1: Windows 2: Linux Private String filestring; // (envolve apenas o caminho do PDF2SWF). arquivo privado pdffile; arquivo privado swffile; arquivo privado docfile; public DocConverter (String filestring) {ini (fileString); } / ** * Arquivo de redefinição * * @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 = novo arquivo (fileString); pdffile = novo arquivo (nome do arquivo + ".pdf"); swffile = novo arquivo (nome do arquivo + ".swf"); } / ** * Converta em pdf * * @param arquivo * / private void doc2pdf () lança exceção {if (docfile.exists ()) {if (! Pdffile.exists ()) {OpenOfficeConnection Connection = new SockopeNOfficeConnection (8100); tente {conexão.connect (); DocumentConverter Converter = new OpenOffordocumentConverter (conexão); converter.convert (docfile, pdffile); // Fechar a conexão Connection.disconnect (); System.out.println ("**** A conversão em pdf é bem -sucedida, saída em PDF:" + pdffile.getPath () + "****"); } catch (java.net.connectException e) {e.printStackTrace (); System.out.println ("**** Exceção do conversor SWF, o serviço OpenOffice não começou! ****"); jogar e; } catch (com.artofsolving.jodconverter.openoffice.connection.openofficeException e) {e.printStackTrace (); System.out.println ("**** Exceção do conversor SWF, lendo o arquivo de conversão falhado ****"); jogar e; } catch (Exceção e) {e.printStackTrace (); jogar e; }} else {System.out.println ("**** foi convertido em PDF, nenhuma conversão é necessária ****"); }} else {System.out.println ("**** Exceção do conversor SWF, o documento que precisa ser convertido não existe e não pode ser convertido ****"); }} / ** * Converta para SWF * / @suppresswarnings ("não utilizado") private void pdf2swf () lança exceção {runtime r = runtime.getRuntime (); if (! swffile.exists ()) {if (pdffile.exists ()) {if (ambiente == 1) {// Processamento de ambiente do Windows tente {Process p = r.exec ("d:/arquivos de programas/swftools/pdf2swf.exe" + pdffile.getPath () + "-o" + swffile.Pwffile.GET.GET.TET.TET.TET.TETPATILHILE.TETPATE ()/swffile/swffile.GET.GET.TETP (swffile/swffile.GET.TEPTE (swffile) (pdf2swf.exe " + pdffile.getPath () +" -o " + swffile.P. System.out.print (loadstream (p.getInputStream ())); System.err.print (loadstream (p.getErrorStream ())); System.out.print (loadstream (p.getInputStream ())); System.err.println ("**** A conversão SWF é bem -sucedida, saída de arquivo:" + swffile.getpath () + "****"); if (pdffile.exists ()) {pdffile.delete (); }} catch (ioexception e) {e.printStackTrace (); jogar e; }} else if (ambiente == 2) {// Processamento de ambiente 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 ("**** A conversão SWF é bem -sucedida, saída de arquivo:" + swffile.getpath () + "****"); if (pdffile.exists ()) {pdffile.delete (); }} catch (Exceção e) {e.printStackTrace (); jogar e; }}} else {System.out.println ("**** PDF não existe, não pode ser convertido ****"); }} else {System.out.println ("**** SWF já existe e não precisa converter ****"); }} String estática loadtream (inputStream in) lança IoException {int ptr = 0; in = new bufferinputStream (in); StringBuffer buffer = new StringBuffer (); while ((ptr = in.read ())! = -1) {buffer.append ((char) ptr); } retornar buffer.toString (); } / ***Converta o método principal* / @suppresswarnings ("não utilizado") public boolean convert () {if (swffile.exists ()) {System.out.println ("**** conversor SWF começa a funcionar, o arquivo foi convertido para SWF ****"); retornar true; } if (Ambiental == 1) {System.out.println ("**** Conversor SWF começa a funcionar, o ambiente de execução atual Windows ****"); } else {System.out.println ("**** Conversor SWF começa a funcionar, o ambiente de execução atual ****"); } tente {doc2pdf (); pdf2swf (); } catch (Exceção e) {e.printStackTrace (); retornar falso; } if (swffile.exists ()) {return true; } else {return false; }} / ** * Retornar caminho do arquivo * * @param s * / public string getswfpath () {if (swffile.exists ()) {string tempstring = swffile.getPath (); tempstring = tempstring.replaceall ("////", "/"); retornar tempstring; } else {return ""; }} / *** Defina o caminho de saída* / 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 = novo arquivo (outputPath + realname + ".swf"); } else {swffile = novo arquivo (outputPath + realname + ".swf"); }}}}6. Implementação e liberação
Inicie o Tomcat e implante o aplicativo Web atual
Digite http: // localhost: 8080/ctcesims/documentUpload.jsp na barra de endereço, como mostrado abaixo:
Clique no botão de visualização e uma interface de visualização será gerada, conforme mostrado na figura abaixo:
4. Perguntas frequentemente feitas
Se o SWF aparecer, você não pode visualizá -lo, visite
http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html#119065
Defina a pasta onde o SWFS é gerado como o local do arquivo de confiança.
A seguir, fornece a diferença entre o Flexpaper 2.1.9: o método de inicialização é alterado. Se o diretório de arquivos não estiver junto com o diretório do projeto, o diretório de anexo poderá ser definido como um diretório virtual no servidor.
<%@ página linguagem = "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/javroScript " 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> <ystyscript " {altura: 100%; } corpo {margem: 0; preenchimento: 0; Overflow: Auto; } #flashContent {display: Nenhum; } </style> <title> Documente o sistema de visualização on -line </title> </ad Head> <body> <div style = "posição: absoluto; esquerda: 50px; topo: 10px;"> <div id = "documentViewer"> </div> <script type = "text/javascript"> var startDocument = "papel"; $ ('#documentViewer'). FlexPaperViewer ({config: {swffile: 'upload/ddd3.swf', escala: 0.6, zoomtransition: 'faceaseout', zoomTime: 0.5, zoominterval: 0.2, fitPageOnLload: fitWidthOnLoader: FalsescrenArmAld: 0.2, 0.2, FitPageOnLload: TruewidthonLoad: FalsescrenArsAmal, 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 fim, se você precisar remover a função de impressão e o logotipo, poderá recomitar o arquivo flash do Flexpaper e baixá -lo online.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.