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

مثال على عرض الملفات المرفقة باستخدام openoffice + swftools + flexpaper في Java

هذا المقال يقدم شرحًا لتحقيق عرض الملفات المرفقة باستخدام Java، ويحتاج إلى استخدام openoffice وSWFTools وFlexPaper، وإليك الخطوات المحددة:

1.مقدمة

المنطق الرئيسي

1.تحويل ملفات word، excel، ppt، txt وما إلى ذلك إلى ملفات PDF باستخدام أدوات ثالثة مثل openoffice

2.تحويل ملفات PDF إلى صيغة SWF باستخدام swfTools

3.عرض المستندات على الصفحة باستخدام مكون FlexPaper

2.تحميل ملفات التثبيت

1.openoffice هو برنامج معالجة النصوص مفتوح المصدر مجاني تحت إشراف Apache

   تحميل العنوان: موقع Apache oppenoffice الرسمي تحميل إصدار-3.4.1 http://www.openoffice.org/zh-cn/download/

2. هو مجموعة أدوات لتعامل ملفات swf لFlash، ونستخدمها لنقل ملفات pdf إلى ملفات swf!

   رابط التحميل: تحميل SWFTools من الموقع الرسمي swftools-2013-04-09-1007.exe  http://www.swftools.org/download.html

3. FlexPaper هو مكتبة مفتوحة المصدر خفيفة الوزن لعرض أنواع مختلفة من المستندات في المتصفح

   رابط التحميل: تحميل FlexPaper من الموقع الرسمي إصدار 1.5.1  https://flowpaper.com/download/

4. هو محول Java لملفات OpenDocument، في هذه الحالة نستخدم فقط مكتبة jar الخاصة به

   رابط التحميل: تحميل JODCConverter  https://sourceforge.net/projects/jodconverter/files/

3. تثبيت الملفات

1. قم بتثبيت الملفات المُنزلة (استثنًا JODConverter)، يمكن تعيين محرك الأقراص وفقًا لتفضيلاتك! يجب ملاحظة أنه بعد تثبيت openoffice، عند استخدامها، يجب فتح خدمتها. في هذه المرة، نحتاج إلى فتحها بطريقة الأمر:

افتح نافذة dos، انتقل إلى محرك الأقراص المثبتة لـ openoffice، واكتب الكود التالي لبدء الخدمة:

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

انتبه إلى أن القوس المسطح قبل آخر أمر يجب ألا يُكتب خطأً! إذا لم يبدأ الخدمة، فإن المشروع لن يستمر!

مسقطات بدء الخدمة على الموقع الرسمي كالتالي:

مسقطات محلية:

3. عملية التطوير

1. قم بإنشاء مشروع جديد، وقم بنسخ مجلد "js" الموجود في ملف "flexpaper" (يحتوي على ملفات js مثل flexpaper_flash_debug.js،flexpaper_flash.js،jquery.js،هذه الملفات js هي إضافات عرض ملفات swf) إلى مجلد الجذر لل موقع; قم بنسخ ملف "FlexPaperViewer.swf" إلى مجلد الجذر لل موقع (يستخدم هذا الملف أساسًا في عرض ملفات swf في صفحات الويب)، بنية المجلد كما في الشكل التالي:

ملاحظة: يجب إنشاء مجلد "upload"

2. إنشاء ملف "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 لرفع الملفات، يمكن تغييره إلى upload via 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"); 
//إخراج معلومات التغذية الراجعة 
 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); 
     //الحصول على امتداد ملف المرفوع 
     String extName=fileName.substring(fileName.lastIndexOf(".")+1); 
     //مسار الملف الكامل 
     String lastFileName= saveDirectory+"\\" + fileName; 
     //الحصول على اسم الملف المطلوب تحويله، استبدال اسم المسار '//' بـ '/' 
     String converfilename = saveDirectory.replaceAll("\\\\", "/")+"/"+fileName; 
     System.out.println(converfilename); 
     //دعوة فئة التحويل DocConverter، ومرور ملف تحتاج إلى تحويل إلى دالة البناء الخاصة بالفئة 
     DocConverter d = new DocConverter(converfilename); 
     //دعوة دالة conver للبدء بالتحويل، أولاً تنفيذ doc2pdf() لتحويل ملف office إلى pdf، ثم تنفيذ 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>إدراج عنوان هنا</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">  
      هتمل، جسيم { ارتفاع: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 = جديد FlexPaperViewer (   
             'FlexPaperViewer', 
             'viewerPlaceHolder', { تكوين: { 
             ملف Swf: هارب ( <%=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, 
             وضع عرض التفاصيل: 'SinglePage', 
             ViewModeToolsVisible : true, 
             ZoomToolsVisible : true, 
             NavToolsVisible : true, 
             CursorToolsVisible : true, 
             SearchToolsVisible : true, 
             localeChain: 'en_US' 
             }}); 
      </script>       
    </div> 
</body> 
</html>

5. إنشاء فئة التحويل DocConverter.java

باكجيز كوم سييكتسيمز يووز; 
استيراد جافا آي او اى ان بادريزت آي او اى ان ستريم; 
استيراد جافا آي او اى ان فايل; 
استيراد جافا آي او اى ان آي او سى; 
استيراد جافا آي او اى ان فلاي آوت ستريم; 
استيراد كوم آرت أوف سولفينج جود كنفرتررر.دوكنت كنفرترر; 
استيراد كوم آرت أوف سولفينج جود كنفرتررر.آوپن آفيس كوننكشن; 
استيراد كوم آرت أوف سولفينج جود كنفرتررر.آوپن آفيس كوننكشن.سوكت آوپن آفيس كوننكشن; 
استيراد كوم آرت أوف سولفينج جود كنفرتررر.آوپن آفيس دキュمنت كنفرترر; 
/** 
 * تحويل doc docx نموذج 
 */ 
public class DocConverter { 
  private static final int environment = 1;// البيئة 1: windows 2:linux 
  private String fileString;// (يشتمل فقط على مسار pdf2swf) 
  private String outputPath = "";// مسار الإدخال، إذا لم يتم تعيينه، يتم الإخراج في الموقع الافتراضي 
  private String fileName; 
  private File pdfFile; 
  private File swfFile; 
  private File docFile; 
  public DocConverter(String fileString) { 
    ini(fileString); 
  } 
  /** 
   * تعيين file 
   * 
   * @param fileString 
   */ 
  public void setFile(String fileString) { 
    ini(fileString); 
  } 
  /** 
   * التشغيل 
   * 
   * @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"); 
  } 
  /** 
   * حوول إلى 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); 
          // إغلاق الاتصال 
          connection.disconnect(); 
          System.out.println("****نجاح التحويل pdf، مخرجات PDF: " + pdfFile.getPath() + "****"); 
        } catch (java.net.ConnectException e) { 
          e.printStackTrace(); 
          System.out.println("****استثنائية محول swf، لم يتم تشغيل خدمة openoffice!****"); 
          throw e; 
        } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) { 
          e.printStackTrace(); 
          System.out.println("****استثنائية محول swf، فشل في قراءة ملف التحويل****"); 
          throw e; 
        } catch (Exception e) { 
          e.printStackTrace(); 
          throw e; 
        } 
      } else { 
        System.out.println("****تم التحويل إلى pdf، لا تحتاج إلى تحويل إضافي****"); 
      } 
    } else { 
      System.out.println("****استثنائية محول swf، وثيقة الوجهة غير موجودة، لا يمكن التحويل****"); 
    } 
  } 
  /** 
   * تحويل إلى swf 
   */ 
  @SuppressWarnings("unused") 
  private void pdf2swf() throws Exception { 
    Runtime r = Runtime.getRuntime(); 
    if (!swfFile.exists()) { 
      if (pdfFile.exists()) { 
        if (environment == 1) {// معالجة بيئة 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("****swf转换成功,文件输出:" 
                + swfFile.getPath() + "****"); 
            if (pdfFile.exists()) { 
              pdfFile.delete(); 
            } 
          } catch (IOException e) { 
            e.printStackTrace(); 
            throw e; 
          } 
        } else if (environment == 2) {// معالجة بيئة 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("****swf转换成功,文件输出:" 
                + swfFile.getPath() + "****"); 
            if (pdfFile.exists()) { 
              pdfFile.delete(); 
            } 
          } catch (Exception e) { 
            e.printStackTrace(); 
            throw e; 
          } 
        } 
      } else { 
        System.out.println("****pdf不存在,无法转换****"); 
      } 
    } else { 
      System.out.println("****swf已经存在不需要转换****"); 
    } 
  } 
  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(); 
  } 
  /** 
   * 转换主方法 
   */ 
  @SuppressWarnings("unused") 
  public boolean conver() { 
    if (swfFile.exists()) { 
      System.out.println("****swf转换器开始工作,该文件已经转换为swf****"); 
      return true; 
    } 
    if (environment == 1) { 
      System.out.println("****swf转换器开始工作,当前设置运行环境windows****"); 
    } else { 
      System.out.println("****swf转换器开始工作,当前设置运行环境linux****"); 
    } 
    try { 
      doc2pdf(); 
      pdf2swf(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
    } 
    if (swfFile.exists()) { 
      return true; 
    } else { 
      return false; 
    } 
  } 
  /** 
   * 返回文件路径 
   * 
   * @param s 
   */ 
  public String getswfPath() { 
    if (swfFile.exists()) { 
      String tempString = swfFile.getPath(); 
      tempString = tempString.replaceAll("\\\\", "/"); 
      return tempString; 
    } else { 
      return ""; 
    } 
  } 
  /** 
   * إعداد مسار الإخراج 
   */ 
  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. النشر

تشغيل Tomcat، نشر تطبيق الويب الحالي

ادخل في شريط العناوينhttp://localhost:8080/ctcesims/documentUpload.jsp كما في الشكل التالي:

بمجرد النقر على زر الاستعراض، سيتم إنشاء واجهة الاستعراض كما في الشكل التالي:

4. الأسئلة الشائعة

إذا لم يتمكن ملف swf من عرض النسخة التخطيطية، يرجى زيارة

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

عند إعداد مجلد يحتوي على ملفات swf كمساحة ملفات موثوقة.
ما يلي يوضح الفروق بين 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>

في النهاية، إذا كنت بحاجة إلى إزالة وظيفة الطباعة و الشعار، يمكنك إعادة تجميع ملفات flash لـ flexpaper، ويوجد أيضًا تنزيلات على الإنترنت

هذا هو نهاية محتوى هذا المقال، نأمل أن يكون قد ساعد في تعلمكم، ونأمل أن تحصلوا على دعمكم الكبير لتعليم呐喊.

البيان: محتوى هذا المقال تم جمعه من الإنترنت، وله حقوق الملكية الأصلية للمالك، تم إدراجه من قبل المستخدمين عبر الإنترنت الذين قاموا بالتحميل، ويستخدم هذا الموقع دون امتلاك حقوق الملكية، ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل الموقع أي مسؤولية قانونية. إذا وجدت محتوى يشتبه في حقوق النسخ، يرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (أثناء إرسال البريد الإلكتروني، يرجى استبدال #بـ @) لإبلاغنا، وقدم الدليل على الأدلة، وسيتم حذف المحتوى المزعوم فور التحقق منه.

أنت قد تعجب بهذا