English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Esempio di visualizzazione anticipata degli allegati in Java (openoffice+swftools+flexpaper)

Questo articolo introduce la realizzazione della visualizzazione degli allegati in Java, che richiede OpenOffice, SWFTools, FlexPaper, le procedure specifiche sono le seguenti:

1.Sommario

Principio principale

1.Trasforma file word, excel, ppt, txt e altri in file PDF utilizzando strumenti di terze parti OpenOffice

2.Trasforma i file PDF in formato SWF utilizzando swfTools

3.Esporre i documenti sulla pagina tramite il componente FlexPaper

2.Scarica il pacchetto di installazione

1.OpenOffice è un software di elaborazione testi libero e open-source sotto Apache

   Indirizzo di download: Scarica Apache OpenOffice ufficiale Versione-3.4.1 http://www.openoffice.org/zh-cn/download/

2. SWFTools è un set di strumenti per gestire i file swf di Flash, utilizziamo questo per convertire i file pdf in swf!

   Indirizzo di download: Download dal sito ufficiale di SWFTools swftools-2013-04-09-1007.exe  http://www.swftools.org/download.html

3. FlexPaper è un componente open source leggero per visualizzare vari documenti nel browser

   Indirizzo di download: Download dal sito ufficiale di FlexPaper Versione 1.5.1  https://flowpaper.com/download/

4. JODConverter è un convertitore Java per file OpenDocument, in questo caso utilizziamo solo il suo jar package

   Indirizzo di download: Download di JODCConverter  https://sourceforge.net/projects/jodconverter/files/

3. Installazione dei file

1. Installare i file scaricati (eccetto JODConverter), il disco di installazione può essere impostato a piacere! È necessario notare che dopo l'installazione di openoffice, quando lo utilizziamo, dobbiamo aprire il suo servizio. In questo caso dobbiamo aprirlo tramite comando:

Aprire la finestra dos, entrare nel disco di installazione di openoffice, digitare il seguente codice per avviare il servizio:

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

Attenzione: non scrivere male il "—" davanti all'ultimo comando! Se il servizio non si avvia, il progetto non può procedere!

L'immagine di avvio del servizio del sito ufficiale è come segue:

Schermata di cattura locale:

3. Processo di sviluppo

1. Creare un nuovo progetto, copiare la cartella js del file flexpaper (che contiene i file js flexpaper_flash_debug.js, flexpaper_flash.js, jquery.js, questi file js sono plugin per la preview dei file swf) nella directory radice del sito; copiare FlexPaperViewer.swf nella directory radice del sito (questo file è utilizzato per riprodurre i file swf nelle pagine web), la struttura della directory è come segue:

Nota: è necessario creare la cartella upload

2. Creare 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"; 
//打印上传路径信息 
System.out.println(saveDirectory); 
//每个文件最大50m 
int maxPostSize = 50 * 1024 * 1024 ; 
//采用cos默认的命名策略,重名后加1,2,3...如果不加dfp重名将覆盖 
DefaultFileRenamePolicy dfp = new DefaultFileRenamePolicy(); 
//response的编码为"UTF-8",同时采用默认的文件名冲突解决策略,实现上传,如果不加dfp重名将覆盖 
MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8",dfp); 
//MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8"); 
//Output delle informazioni di feedback 
 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); 
     //Ottieni l'estensione del file caricato 
     String extName=fileName.substring(fileName.lastIndexOf(".")+1); 
     //Percorso completo del file 
     String lastFileName= saveDirectory+"\\" + fileName; 
     //Ottieni il nome del file da convertire, sostituisci i nomi di percorso '\\' con '/' 
     String converfilename = saveDirectory.replaceAll("\\\\", "/")+"/"+fileName; 
     System.out.println(converfilename); 
     //Chiamata alla classe di conversione DocConverter e passaggio del file da convertire al costruttore della classe 
     DocConverter d = new DocConverter(converfilename); 
     //Chiamata al metodo conver per iniziare la conversione, esegue prima doc2pdf() per convertire il file office in pdf; poi esegue pdf2swf() per convertire il pdf in swf; 
     d.conver(); 
     //Chiamata al metodo getswfPath(), stampa il percorso del file swf convertito 
     System.out.println(d.getswfPath()); 
     //Genera il percorso relativo del swf per passarlo al riproduttore Flexpaper 
     String swfpath = "upload"+d.getswfPath().substring(d.getswfPath().lastIndexOf("/"));} 
     System.out.println(swfpath); 
     //Salva il percorso relativo nella sessione 
     session.setAttribute("swfpath", swfpath); 
     out.println("File caricato:"+lastFileName); 
     out.println("Tipo di file"+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>Inserisci il titolo qui</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='Anteprima' class='BUTTON SUBMIT'/> 
    </form> 
  </div> 
</body> 
</html>

Creazione della pagina di visualizzazione 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. Creare la classe di conversione 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; 
/** 
 * Convert doc docx format 
 */ 
public class DocConverter { 
  private static final int environment = 1;// Environment 1: windows 2:linux 
  private String fileString;// (only involves pdf2swf path issues) 
  private String outputPath = "";// Input path, if not set, output at the default location 
  private String fileName; 
  private File pdfFile; 
  private File swfFile; 
  private File docFile; 
  public DocConverter(String fileString) { 
    ini(fileString); 
  } 
  /** 
   * Reset file 
   * 
   * @param fileString 
   */ 
  public void setFile(String fileString) { 
    ini(fileString); 
  } 
  /** 
   * Initialization 
   * 
   * @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"); 
  } 
  /** 
   * Convert to 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);} 
          // chiudere la connessione 
          connection.disconnect(); 
          System.out.println("****Conversione pdf riuscita, output PDF: " + pdfFile.getPath() + "****"); 
        } catch (java.net.ConnectException e) { 
          e.printStackTrace(); 
          System.out.println("****Eccezione del convertitore swf, il servizio openoffice non è stato avviato!****"); 
          throw e; 
        } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) { 
          e.printStackTrace(); 
          System.out.println("****Eccezione del convertitore swf, lettura del file di conversione fallita****"); 
          throw e; 
        } catch (Exception e) { 
          e.printStackTrace(); 
          throw e; 
        } 
      } else { 
        System.out.println("****Già convertito in pdf, non è necessario ulteriormente convertire****"); 
      } 
    } else { 
      System.out.println("****Eccezione del convertitore swf, il documento da convertire non esiste, impossibile convertire****"); 
    } 
  } 
  /** 
   * Convertire in swf 
   */ 
  @SuppressWarnings("unused") 
  private void pdf2swf() throws Exception { 
    Runtime r = Runtime.getRuntime(); 
    if (!swfFile.exists()) { 
      if (pdfFile.exists()) { 
        if (environment == 1) {// gestione ambiente 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 conversione swf è riuscita, file di output:", 
                + swfFile.getPath() + "****"); 
            if (pdfFile.exists()) { 
              pdfFile.delete(); 
            } 
          } catch (IOException e) { 
            e.printStackTrace(); 
            throw e; 
          } 
        } else if (environment == 2) {// gestione 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("****La conversione swf è riuscita, file di output:", 
                + swfFile.getPath() + "****"); 
            if (pdfFile.exists()) { 
              pdfFile.delete(); 
            } 
          } catch (Exception e) { 
            e.printStackTrace(); 
            throw e; 
          } 
        } 
      } else { 
        System.out.println("****Il file pdf non esiste, impossibile convertire****"); 
      } 
    } else { 
      System.out.println("****Il file swf esiste già, non è necessario convertire****"); 
    } 
  } 
  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(); 
  } 
  /** 
   * Metodo principale di conversione 
   */ 
  @SuppressWarnings("unused") 
  public boolean conver() { 
    if (swfFile.exists()) { 
      System.out.println("****Il convertitore swf inizia a lavorare, il file è già stato convertito in swf****"); 
      return true; 
    } 
    if (environment == 1) { 
      System.out.println("****Il convertitore swf inizia a lavorare, l'ambiente di esecuzione attuale è windows****"); 
    } else { 
      System.out.println("****Il convertitore swf inizia a lavorare, l'ambiente di esecuzione attuale è linux****"); 
    } 
    try { 
      doc2pdf(); 
      pdf2swf(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
    } 
    if (swfFile.exists()) { 
      return true; 
    } else { 
      return false; 
    } 
  } 
  /** 
   * Restituisce il percorso del file 
   * 
   * @param s 
   */ 
  public String getswfPath() { 
    if (swfFile.exists()) { 
      String tempString = swfFile.getPath(); 
      tempString = tempString.replaceAll("\\\\", "/"); 
      return tempString; 
    } else { 
      return ""; 
    } 
  } 
  /** 
   /* Impostare il percorso di output */ 
   */ 
  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. Distribuzione e pubblicazione

Avviare il tomcat e distribuire l'applicazione web corrente

Inserire l'indirizzo nella barra degli indirizzihttp://localhost:8080/ctcesims/documentUpload.jsp Come nella figura seguente:

Cliccando sul pulsante di anteprima, verrà generata l'interfaccia di anteprima, come nella figura seguente:

4. Domande frequenti

Se non è possibile visualizzare il swf, visitare

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html#119065

Impostare la directory in cui viene generato swf come posizione di file fidata.
Di seguito sono elencate le differenze di flexpaper 2.1.9: il metodo di inizializzazione è cambiato, se la directory dei file non è nella stessa directory del progetto, è possibile impostare la directory degli allegati come directory virtuale sul server

<%@ 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>

Infine, se desideri rimuovere la funzione di stampa e il logo, puoi ricompilare il file flash di flexpaper, ci sono anche download disponibili su Internet

Questo è tutto il contenuto dell'articolo, speriamo che sia utile per la tua apprendimento, e speriamo che tu sostenga fortemente il Corso Urla.

Dichiarazione: il contenuto di questo articolo è stato preso da Internet, il copyright spetta ai rispettivi autori, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare