`

开源DMS - 文档管理系统 - logicaldoc 里面转换SWF

    博客分类:
  • Java
阅读更多

logicaldoc 

 

主页: http://logicaldoc.com/

文档:http://docs.logicaldoc.com/

下载: http://sourceforge.net/projects/logicaldoc/

 

 

logicaldoc 里面转换SWF用到了三个命令:

command.convert=convert

command.gs=gs

command.pdf2swf=pdf2swf

 

 

http://forums.logicaldoc.com/viewtopic.php?f=6&t=416&p=1050&hilit=command.convert#p1050

Speacking about the latest release 6.2.3, you need some external command.


GhostScript
ImageMagik
SWFTools

 

 

package com.logicaldoc.web;

import com.logicaldoc.core.document.Document;
import com.logicaldoc.core.document.dao.DocumentDAO;
import com.logicaldoc.core.document.thumbnail.ThumbnailManager;
import com.logicaldoc.core.store.Storer;
import com.logicaldoc.util.Context;
import com.logicaldoc.util.MimeType;
import com.logicaldoc.util.config.ContextProperties;
import com.logicaldoc.web.util.SessionUtil;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class DocumentPreview extends HttpServlet
{
  protected static final String SUFFIX = "suffix";
  public static final String DOC_ID = "docId";
  private static final String FILE_VERSION = "fileVersion";
  private static final long serialVersionUID = -6956612970433309888L;
  protected static Log log = LogFactory.getLog(DocumentPreview.class);
  protected static String PDF2SWF = "command.pdf2swf";
  protected static String IMG2PDF = "command.convert";
  protected String SWF_DIRECT_CONVERSION_EXTS = "gif, png, pdf, jpeg, jpg, tiff, tif";

  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
  {
    String id = request.getParameter("docId");
    String fileVersion = request.getParameter("fileVersion");
    String suffix = request.getParameter("suffix");

    InputStream stream = null;
    try {
      Storer storer = (Storer)Context.getInstance().getBean(Storer.class);

      long docId = Long.parseLong(id);
      if (StringUtils.isEmpty(suffix))
        suffix = "thumb.jpg";
      DocumentDAO docDao = (DocumentDAO)Context.getInstance().getBean(DocumentDAO.class);
      Document doc = (Document)docDao.findById(docId);
      if (StringUtils.isEmpty(fileVersion))
        fileVersion = doc.getFileVersion();

      SessionUtil.validateSession(request.getParameter("sid"));

      String resource = storer.getResourceName(docId, fileVersion, suffix);

      if (!(storer.exists(docId, resource))) {
        log.debug("Need for preview creation");
        createPreviewResource(doc, fileVersion, resource);
      }

      stream = storer.getStream(docId, resource);

      if (stream == null) {
        log.debug("thumbnail not available");
        forwardPreviewNotAvailable(request, response);

        return;
      }
      downloadDocument(request, response, stream, storer.getResourceName(doc, fileVersion, suffix));
    } catch (Throwable t) {
      log.error(t.getMessage(), t);
      new IOException(t.getMessage());
    } finally {
      if (stream != null)
        stream.close();
    }
  }

  protected void createPreviewResource(Document doc, String fileVersion, String resource)
  {
    Storer storer = (Storer)Context.getInstance().getBean(Storer.class);
    String thumbResource = storer.getResourceName(doc, fileVersion, "thumb.jpg");

    if (!(storer.exists(doc.getId(), thumbResource))) {
      ThumbnailManager thumbManager = (ThumbnailManager)Context.getInstance().getBean(ThumbnailManager.class);
      try {
        thumbManager.createTumbnail(doc, fileVersion);
        log.debug("Created thumbnail " + resource);
      } catch (Throwable t) {
        log.error(t.getMessage(), t);
      }
    }

    if (resource.endsWith(".jpg")) {
      return;
    }

    if (!(storer.exists(doc.getId(), resource))) {
      InputStream is = null;
      File tmp = null;
      try {
        tmp = File.createTempFile("preview", "");

        String docExtension = FilenameUtils.getExtension(doc.getFileName());
        if (this.SWF_DIRECT_CONVERSION_EXTS.contains(docExtension))
        {
          is = storer.getStream(doc.getId(), storer.getResourceName(doc, fileVersion, null));
          document2swf(tmp, docExtension, is);
        }
        else {
          is = storer.getStream(doc.getId(), thumbResource);

          document2swf(tmp, "jpg", is);
        }

        storer.store(tmp, doc.getId(), resource);
        log.debug("Created preview " + resource);
      } catch (Throwable e) {
        log.error(e.getMessage(), e);
      } finally {
        if (tmp != null)
          FileUtils.deleteQuietly(tmp);
        if (is != null)
          try {
            is.close();
          }
          catch (IOException e) {
          }
      }
    }
  }

  protected void forwardPreviewNotAvailable(HttpServletRequest request, HttpServletResponse response) {
    try {
      RequestDispatcher rd = request.getRequestDispatcher("/skin/images/preview_na.gif");
      rd.forward(request, response);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static void downloadDocument(HttpServletRequest request, HttpServletResponse response, InputStream is, String filename)
    throws FileNotFoundException, IOException
  {
    String mimetype = MimeType.getByFilename(filename);

    response.setContentType(mimetype);

    OutputStream os = response.getOutputStream();

    int letter = 0;
    try {
      while ((letter = is.read()) != -1)
        os.write(letter);
    }
    finally {
      os.flush();
      os.close();
      is.close();
    }
  }

  protected void document2swf(File swfCache, String extension, InputStream docInput)
    throws IOException
  {
    File tmpPdf = null;
    try {
      tmpPdf = File.createTempFile("preview", ".pdf");
      if ("pdf".equals(extension.toLowerCase())) {
        FileOutputStream fos = null;
        try {
          fos = new FileOutputStream(tmpPdf);
          IOUtils.copy(docInput, fos);
          fos.flush();
        } catch (Throwable e) {
        }
        finally {
          IOUtils.closeQuietly(fos);
        }
      } else {
        img2pdf(docInput, extension, tmpPdf); }
      pdf2swf(tmpPdf, swfCache);
    } finally {
      if (tmpPdf != null)
        FileUtils.deleteQuietly(tmpPdf);
    }
  }

  protected void img2pdf(InputStream is, String extension, File output)
    throws IOException
  {
    File tmp = File.createTempFile("preview", extension);
    String inputFile = tmp.getPath() + "[0]";
    FileOutputStream fos = null;
    try
    {
      fos = new FileOutputStream(tmp);
      IOUtils.copy(is, fos);
      fos.flush();
      fos.close();

      ContextProperties conf = (ContextProperties)Context.getInstance().getBean(ContextProperties.class);

      ProcessBuilder pb = new ProcessBuilder(new String[] { conf.getProperty(IMG2PDF), inputFile, "  -compress None -quality 100 ", output.getPath() });

      Process process = pb.start();

      Thread wrapper = new Thread(process)
      {
        public void run()
        {
          try
          {
            this.val$process.waitFor();
          }
          catch (InterruptedException e) {
          }
        }
      };
      wrapper.start();

      for (int i = 0; i < 10; ++i)
        if (wrapper.isAlive())
          try {
            Thread.sleep(1000L);
          }
          catch (InterruptedException e) {
          }
      wrapper.interrupt();

      process.destroy();
    } catch (Throwable e) {
    }
    finally {
      IOUtils.closeQuietly(fos);
      tmp.delete();
    }
  }

  protected void pdf2swf(File input, File output)
    throws IOException
  {
    ContextProperties conf = (ContextProperties)Context.getInstance().getBean(ContextProperties.class);
    String[] cmd = composeCmd(conf.getProperty(PDF2SWF), input, output);
    BufferedReader stdout = null;
    Process process = null;
    try {
      ProcessBuilder pb = new ProcessBuilder(cmd);
      process = pb.start();
      stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));

      while (stdout.readLine() != null);
      process.waitFor();
    } catch (Throwable e) {
      output.delete();
      log.error("Error in PDF to SWF conversion", e);
    } finally {
      if (process != null)
        process.destroy();
      IOUtils.closeQuietly(stdout);
    }
  }

  protected String[] composeCmd(String command, File input, File output)
  {
    String[] standardCmd = { command, "-f", "-T 9", "-t", "-G", "-s storeallcharacters", input.getPath(), "-o", output.getPath() };

    String[] imgCmd = { command, "-T 9 -q 30", input.getPath(), "-o", output.getPath() };
    if (command.endsWith("convert"))
      return imgCmd;

    return standardCmd;
  }
}

 

分享到:
评论

相关推荐

    DMS-KM 文档管理系统

    文档管理系统(DMS-KM)是知识管理领域中不可或缺的一部分,它主要负责组织、存储、检索和管理各类文档,以确保信息的有效流通和利用。在这个信息化时代,文档管理系统的功能和重要性日益凸显,它可以帮助企业或个人...

    logicaldoc-community-installer-8.3.4.zip

    智能和开源文档管理系统 LogicalDOC是文档管理和协作系统。该软件具有许多功能,可以为任何组织和个人安全,安全地组织,索引,检索,控制和分发重要的业务文档。 公司使用纸质流程(例如打印,邮寄和手动归档...

    LogicalDOC Document Management - DMS:智能和开源文档管理系统-开源

    我们的文档管理系统用电子程序替代了所有这些方法,从而使您的组织可以显着降低成本。 查看https://www.logicaldoc.com了解更多信息。 为了提供可靠的DMS平台,LogicalDOC的设计基于最佳的Java技术。 主界面是基于...

    logicaldoc-community-installer-8.3.4.exe

    智能和开源文档管理系统 LogicalDOC是文档管理和协作系统。该软件具有许多功能,可以为任何组织和个人安全,安全地组织,索引,检索,控制和分发重要的业务文档。 公司使用纸质流程(例如打印,邮寄和手动归档...

    Papermerge是一个开源文档管理系统(DMS)-Python开发

    Papermerge是一个开源文档管理系统(DMS),主要用于归档和检索数字文档。 您无需在办公桌,办公室或抽屉上堆满纸质文件,而是可以快速对其进行扫描并将其配置为直接上传到Papermerge DMS。 Papermerge-文档管理系统...

    SAP_DMS-SAP文档管理系统

    ### SAP文档管理系统(DMS)配置及操作指南 #### 概述 SAP文档管理系统(Document Management System, DMS)是SAP系统中的一个重要模块,它主要用于管理存储在系统中的各类文档,包括但不限于合同、报告、设计图纸等...

    DMS-PSO_code.rar_DMS PSO_DMS-PSO_code_Multi Swarm_dms_动态粒子群

    【标题】"DMS-PSO_code.rar" 是一个包含动态多群粒子群优化算法(Dynamic Multi-Swarm Particle Swarm Optimization,简称DMS-PSO)的代码资源。DMS-PSO是粒子群优化(PSO)算法的一种扩展,旨在提高算法的全局搜索...

    2005-IEEE-SIS-DMS_PSO_func_particle_dms-pso_多种群_ieeepso_

    标题中的"2005-IEEE-SIS-DMS_PSO_func_particle_dms-pso_多种群_ieeepso_"暗示了这是一个关于2005年IEEE Swarm Intelligence Symposium (SIS)会议上的研究,主要探讨了DMS_PSO(动态多策略粒子群优化器)算法在函数...

    2010-CEC-DMS-PSO-MMTS-LSO_songiw8_cec2010_粒子群_PSO_dms-pso_

    标题 "2010-CEC-DMS-PSO-MMTS-LSO_songiw8_cec2010_粒子群_PSO_dms-pso_" 提到的是一个关于2010年国际进化计算挑战赛(CEC 2010)的研究项目,主要涉及动态多群粒子群优化器(DMS-PSO)和一些相关的算法。...

    document-management-software:LogicalDOC社区开源文档管理系统https

    开源文档管理软件LogicalDOC Community Edition是一个。 如果您正在寻找免费的费用,那么“社区”是您的最佳选择。 LogicalDOC使企业可以控制电子文档的生产,存储,管理和分发,从而产生更大的效力以及重用信息和...

    dms-filter-master基于标注的PHP过滤库.zip

    namespace DMS\Filter; class Filter implements FilterInterface {  protected $metadataFactory;  protected $filterLoader;  public function __construct(Mapping\ClassMetadataFactory $...

    DMS企业版-win64.zip

    阿里云DMS(Database Management System)企业版是一款专为Windows平台设计的数据库管理软件,它为企业提供了高效、安全且易用的数据库管理解决方案。这款工具主要用于帮助IT专业人员和数据库管理员更加便捷地进行...

    dms-webapp:物流配送管理系统

    【标题】:“dms-webapp:物流配送管理系统” 在IT行业中,物流配送管理系统是一个至关重要的应用,它主要用于优化和自动化物流公司的配送流程。"dms-webapp" 是一个专为此目的设计的开源项目,旨在帮助企业管理其...

    北阳光通讯传感器使用说明

    北阳光通讯传感器的配置包括两个部分:头对头式传感器(DMS-GB1-N)和侧对侧式传感器(DMS-HB1-N)。这两个传感器的主要配置参数如下: * 传输距离:0~1m(可通过调整器调整) * 指令角度:30°(全角度) * 传输...

    SAP 文档管理系统(DMS) 配置文档

    ### SAP 文档管理系统(DMS)配置文档知识点解析 #### 一、文档管理系统(DMS) 文档管理系统(Document Management System, DMS)是SAP系统中一个重要的组成部分,它旨在帮助企业实现文档的有效管理与利用。通过DMS...

    PyPI 官网下载 | mypy-boto3-dms-1.12.30.0.tar.gz

    标题中的“PyPI 官网下载 | mypy-boto3-dms-1.12.30.0.tar.gz”表明这是一个从Python Package Index(PyPI)官方源下载的压缩包,名为“mypy-boto3-dms-1.12.30.0.tar.gz”。PyPI是Python开发者发布和获取开源软件包...

    PyPI 官网下载 | mypy-boto3-dms-1.17.38.0.tar.gz

    标题中的“PyPI 官网下载 | mypy-boto3-dms-1.17.38.0.tar.gz”表明这是一个从Python Package Index(PyPI)官方源下载的压缩包,名为“mypy-boto3-dms-1.17.38.0.tar.gz”。PyPI是Python社区广泛使用的软件包仓库,...

    DMS.rar_ DMS_ASP 文档管理_dms_文档管理_管理系统

    文档管理系统(DMS)是一种用于组织、存储、检索和管理企业内部各种技术文档的重要工具。在本案例中,我们讨论的是一款名为"DMS"的ASP.NET实现的文档管理系统。ASP.NET是微软公司推出的Web应用程序框架,它允许...

    PyPI 官网下载 | mypy-boto3-dms-1.10.43.0.tar.gz

    标题中的"PyPI 官网下载 | mypy-boto3-dms-1.10.43.0.tar.gz"表明这是一个从Python Package Index (PyPI)官方源下载的压缩包,具体是mypy-boto3-dms的版本1.10.43.0,格式为tar.gz。PyPI是Python开发者发布和分享...

    PyPI 官网下载 | mypy-boto3-dms-1.14.17.0.tar.gz

    在压缩包内的文件名称列表仅包含“mypy-boto3-dms-1.14.17.0”,这通常意味着解压后会得到一个包含源代码、文档、测试和其他资源的Python包结构,如`setup.py`(用于安装)、`src`或`mypy_boto3_dms`目录(库代码)...

Global site tag (gtag.js) - Google Analytics