logicaldoc
文档: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)是知识管理领域中不可或缺的一部分,它主要负责组织、存储、检索和管理各类文档,以确保信息的有效流通和利用。在这个信息化时代,文档管理系统的功能和重要性日益凸显,它可以帮助企业或个人...
我们的文档管理系统用电子程序替代了所有这些方法,从而使您的组织可以显着降低成本。 查看https://www.logicaldoc.com了解更多信息。 为了提供可靠的DMS平台,LogicalDOC的设计基于最佳的Java技术。 主界面是基于...
智能和开源文档管理系统 LogicalDOC是文档管理和协作系统。该软件具有许多功能,可以为任何组织和个人安全,安全地组织,索引,检索,控制和分发重要的业务文档。 公司使用纸质流程(例如打印,邮寄和手动归档...
智能和开源文档管理系统 LogicalDOC是文档管理和协作系统。该软件具有许多功能,可以为任何组织和个人安全,安全地组织,索引,检索,控制和分发重要的业务文档。 公司使用纸质流程(例如打印,邮寄和手动归档...
Papermerge是一个开源文档管理系统(DMS),主要用于归档和检索数字文档。 您无需在办公桌,办公室或抽屉上堆满纸质文件,而是可以快速对其进行扫描并将其配置为直接上传到Papermerge DMS。 Papermerge-文档管理系统...
### SAP文档管理系统(DMS)配置及操作指南 #### 概述 SAP文档管理系统(Document Management System, DMS)是SAP系统中的一个重要模块,它主要用于管理存储在系统中的各类文档,包括但不限于合同、报告、设计图纸等...
【标题】"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 Swarm Intelligence Symposium (SIS)会议上的研究,主要探讨了DMS_PSO(动态多策略粒子群优化器)算法在函数...
标题 "2010-CEC-DMS-PSO-MMTS-LSO_songiw8_cec2010_粒子群_PSO_dms-pso_" 提到的是一个关于2010年国际进化计算挑战赛(CEC 2010)的研究项目,主要涉及动态多群粒子群优化器(DMS-PSO)和一些相关的算法。...
开源文档管理软件LogicalDOC Community Edition是一个。 如果您正在寻找免费的费用,那么“社区”是您的最佳选择。 LogicalDOC使企业可以控制电子文档的生产,存储,管理和分发,从而产生更大的效力以及重用信息和...
namespace DMS\Filter; class Filter implements FilterInterface { protected $metadataFactory; protected $filterLoader; public function __construct(Mapping\ClassMetadataFactory $...
阿里云DMS(Database Management System)企业版是一款专为Windows平台设计的数据库管理软件,它为企业提供了高效、安全且易用的数据库管理解决方案。这款工具主要用于帮助IT专业人员和数据库管理员更加便捷地进行...
【标题】:“dms-webapp:物流配送管理系统” 在IT行业中,物流配送管理系统是一个至关重要的应用,它主要用于优化和自动化物流公司的配送流程。"dms-webapp" 是一个专为此目的设计的开源项目,旨在帮助企业管理其...
标题中的“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”表明这是一个从Python Package Index(PyPI)官方源下载的压缩包,名为“mypy-boto3-dms-1.17.38.0.tar.gz”。PyPI是Python社区广泛使用的软件包仓库,...
北阳光通讯传感器的配置包括两个部分:头对头式传感器(DMS-GB1-N)和侧对侧式传感器(DMS-HB1-N)。这两个传感器的主要配置参数如下: * 传输距离:0~1m(可通过调整器调整) * 指令角度:30°(全角度) * 传输...
文档管理系统(DMS)是一种用于组织、存储、检索和管理企业内部各种技术文档的重要工具。在本案例中,我们讨论的是一款名为"DMS"的ASP.NET实现的文档管理系统。ASP.NET是微软公司推出的Web应用程序框架,它允许...
标题中的"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开发者发布和分享...
在压缩包内的文件名称列表仅包含“mypy-boto3-dms-1.14.17.0”,这通常意味着解压后会得到一个包含源代码、文档、测试和其他资源的Python包结构,如`setup.py`(用于安装)、`src`或`mypy_boto3_dms`目录(库代码)...