永中DCS产品文档
基本信息
永中文档在线预览软件(Document Conversion Service,简称DCS)是通过解析常用办公文档的格式,提供不同文档格式间的相互转换,实现常用格式文档的阅读等服务。 DCS能直接部署在Windows或Linux网络操作系统上,与Web 服务器、邮件服务器等配合,提供Office文档阅读及批量转换功能。 永中DCS支持阅读和转换的文档格式非常丰富,涵盖微软Office 97~2013、PDF、UOF和OFD等常用文档格式,同时可根据用户需求进行特定格式的合作。
在使用方式方面,支持永中文档转换组件(Document Conversion Component,简称DCC)和DCS服务器(DCS Server)两种使用方式:前者是jar包调用(DCC),主要适合java语言调用;后者为http请求方式调用,支持各种开发语言以标准Web服务方式提供调用,如搭配负载均衡服务器,可部署到多台服务器上并发使用,实现集群部署。 在输出网页效果方面,新增高清版网页效果支持。可在网页中展示与Office中显示一致的原版式、支持无极缩放和复制文本内容的高清版面效果。 具体支持格式见下表:
源格式 | 目标格式(图像包括JPG、PNG、BMP、TIFF等) | 说明 |
XLS、XLSX | HTML/PDF/UOF/TXT/CSV/图像/EIO | 微软文档格式 |
PPT、PPTX | HTML/PDF/UOF/TXT/图像/EIO | |
DOC、DOCX | HTML/PDF/UOF/TXT/图像/EIO | |
RTF | HTML/PDF/UOF/TXT/图像/EIO | RTF文档格式 |
EIO | HTML/PDF/UOF/TXT/图像/DOC/XLS/PPT | 永中Office格式 |
UOF、UOS | HTML/PDF/TXT/图像/DOC/XLS/PPT | 中文办公软件文档标准格式 |
XML | HTML/PDF/UOF/TXT/图像/DOC/XLS/PPT | XML文档格式 |
PNG | Adobe阅读PDF文档格式 | |
Office文档 | OFD | 中文版式文档格式 |
版本信息:
版本信息:
V3.1(2016.4.4):F1 新增压缩包预览功能:
直接打开zip、rar等常见压缩格式文档,方便用户直接查看压缩文件内的文档。
F2 新增水印功能:
水印内容可由用户自定义,比如用户ID、公司名称、邮件名称等,能起到宣传或防泄密等作用。
F3 新增页面防复制功能:
用户在设置防复制功能后,将无法选中复制文档中的文字,可以保护用户文档的私密性和安全性。
F4 新增网站嵌入代码实现在线预览功能:
政府、学校等网站上有大量的包含Office附件的公告、告示和通知等,用户使用时一般需要下载到本地后才能利用Office打开查阅,使用不太方便。经研究开发,只需要在网站页面增加一句嵌入代码,就可以实现自动搜索和匹配当前页面的Office文档并提供快速预览功能。
F5 ppt/pptx高清预览优化:
1、增加了左侧缩略图
2、增加了幻灯片放映功能
3、增加了键盘控制上一页下一页事件
F6 高清预览输出优化:
1、优化后的doc/docx文档大小为原先的四分之一,提升了转换性能
2、解决了浏览器复制粘贴后乱码问题
3、解决了浏览器无法搜索词组的问题
F7 其他改进:
1、改进excel格式文档IE8浏览器中图片的显示
2、改进ppt格式文档IE8浏览器的显示功能
3、解决用户在云平台部署dcs服务的授权问题
V3.2(2016.11.8):F1:支持加密Office文档预览,输入正确的密码,就可以预览文档内容(可在官网“示例”页体验)
F2:支持doc/docx文档标准预览时是否显示文档目录,新增isShowList参数,默认开启(可在官网“示例”页体验)
F3:支持压缩文件内的html文件预览(可在官网“示例”页体验)
F4:支持https加密方式转换和预览文档
F5:新增html转pdf功能,支持在线网页转换为版式一致的pdf文件(可在官网“示例”页体验)
F6:doc/docx文档高清预览新增图片水印接口wmPicPath,可设置图片作为水印
F7:标准预览结果页面底部新增技术支持说明信息
F8:针对Linux下文件读写权限问题,在config配置文件增加FilePermission参数,可控制转换后文件的权限,默认设置为false
F9:支持pdf高清预览分页加载,在config文件中设置pdfstaticPath
F10:优化doc/docx预览效果,如批注、修订等,优化PPT高清预览效果
F11:onlinefile接口支持缓存机制,同一文件第二次预览时直接读取缓存,极大地提升访问速度
F12:整合劳动合同生成器样例到DCS产品中,提供批量文档自动生成示范
V3.3(2017.04.18)F1: DCS支持跨域访问
F2:支持Any2OFD
F3:用户可通过参数自定义文件名和生成的相对路径
F4:用户可以通过配置设置是否显示修订
F5:增加接口可以实时查看转换实例数
F6:htmlname参数适用于压缩包预览
F7:新增文档通过转图片的方式转换成html,效果和高清一样,浏览器不需要IE9以上
F8:压缩包预览时,内部文档可以选择标准预览还是高清预览
F9:增强安全性机制,对参数等进行再处理,保护用户服务器安全
F10:支持window下和linux下的一键部署
F11:增加打印功能
F12:pdf标准预览支持添加水印
F13:支持多pdf文档合并操作
F14:支持ofd文档预览
F15:优化onlinefile接口效率,更快更强
F16:pdf标准预览支持选页跳转,显示页码和总页数
V3.4(2018.08.07)F1:针对window服务器,dcs新增html转pdf功能
F2:预览页面可选择是否显示修订
F3:dcs新增缓存机制,相同文件第二次不再转换,缓存时间用户可自主配置
F4:新增是否竖排显示参数,针对ppt
F5:预览页面新增打印按钮,参数可配置
F6:新增查询dcs服务是否过期接口
F7:新增获取授权码接口
F8:动态水印功能
F9:优化onlinefile接口针对url的处理
F10:dcs新增文档转swf功能,并提供swf在线预览功能
F11:针对有权限控制的文件下载url,可通过传cookie方式允许下载
F12:预览页面新增源文档下载按钮,参数可配置
F13:新增预览页面防下载功能
F14:转图片方式通过zoom参数可控制转换后图片缩放比例
F15:预览页面新增全屏按钮,参数可配置
F16:新增修改pdf源文档属性方法
F17:新增文档转文档功能,可实现word源文档添加水印,插入内容,内容替换等功能
F18:压缩包预览参数加密
F19:新增文档转ofd功能
F20:新增pdf源文档加水印功能
F21:pdf高清预览支持水印
F22:新增tif高清预览功能
F23:支持ftp协议文档转换
F24:新增tif文件后台异步转换功能
F25:新增office文件高清预览后台异步转换功能
F26:新增pdf标清预览后台异步转换功能
F27:新增excel转图片添加边框功能
F28:新增错误文件监听功能,针对错误文件记录并规避再次转换
F29:压缩包预览支持jpeg,ico等格式
F30:静态水印支持设置间距,透明度,旋转角度等参数
F31:新增tar,7z,gz格式在线预览功能
F32:部分接口参数加密化,优化安全性
F33:新增ofd文件在线预览功能
F34:转换效果优化
DCS服务
运行环境:
jre8、apache-tomcat-8.0.26、nginx以及转换所需的字体。
部署流程(linux下):
▪ 安装JDK8
这里使用的是压缩版的JDK
解压文件
tar -zxvf jdk-8u60-linux-x64.tar.gz
修改环境变量 vi /etc/profile
JAVA_HOME=/home/admin/web/jdk8 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH并让配置文件生效
source /etc/profile在终端使用echo命令检查环境变量设置情况:
#echo $JAVA_HOME #echo $CLASSPATH #echo $PATH检查JDK是否安装成功:
#java –version▪ Tomcat的配置部署
解压文件
tar -zxvf apache-tomcat-8.0.26.tar.gz▪ 部署DCS工程
把永中DCS工程目录复制到tomcat 的webapp目录下。
修改${tomcat.home}\conf\server.xml文件.在Host节点下增加如下参考代码:
<Context docBase="指向项目的根目录所在的路径" path="虚拟目录名" reloadable="true"/>
根据需要修改项目中 ${dcs.web}\WEB-INF\config.properties和log4j.properties的配置。需要在目录/usr/X11R6/lib/X11/fonts/TrueType下加入字体文件。
启动tomcat后,访问http://localhost:8080/dcs.web 即可看到“在线文档预览示例”页面。
▪ 安装nginx
tar -zxvf nginx-1.9.2.tar.gz进入 nginx 文件夹 cd nginx-1.9.2
执行 ./configure 可能会遇到系统缺少库
问题:
1:./configure: err: C compiler cc is not found
缺少gc++库文件
su root cd / yum -y install gcc gcc-c++ autoconf automak等待 complete
2:./configure: error: the HTTP rewrite module requires the PCRE library
su root yum -y intall pcre pcre-devel等待complete
3:./configure:error: the HTTP gzip module requires the zlib library
yun -y install zlib zlib-devel解决所有问题后 再次
./configure make make install安装完成后对/usr/local/nginx/conf/nginx.conf 配置文件进行所需配置。
集群配置
按以上步骤在多台服务器上安装配置好tomcat 并启动,确认tomcat 启动成功,在nginx服务配置文件nginx.conf中进行集群相关配置。
例如三台服务器,其中192.168.1.100为ngnix服务器,192.168.1.101为第一台DCS服务器,192.168.1.102为第二台服务器,
则nginx.conf相关配置为:
#设定负载均衡的服务器列表
upstream tomcat_server { server 192.168.1.101:80; server 192.168.1.102:80; }注意: windows 及 mac os下,jdk请尽量使用安装包.exe,.dmg安装,安装程序将自动配置环境变量。
linux下如果遇到如下提示
-bash: /usr/java/jdk1.8.0_65/bin/java: Permission denied
则表明文件或文件夹没权限,请执行如下操作
chmod -R 777 /usr/java/jdk1.8.0_65
部署流程(windows下):
▪ 安装JDK8
首先下载JDK,下载页面地址:
http://www.oracle.com/technetwork/java/javase/downloads/index.html;修改环境变量:右击“计算机”,在右键菜单中点击“属性”,在弹出窗口中点击“高级系统设置”,选择“高级”选项卡,点击“环境变量”按钮;
需要设置三个属性“JAVA_HOME”、“path”、“classpath”。
一:点“新建”,然后在变量名写上JAVA_HOME,然后在变量值写入刚才安装的路径“C:\jdk1.8”。
二:其次在系统变量里面找到path,然后点编辑,path变量的含义就是系统在任何路径下都可以识别java命令,则变量值为“.;%JAVA_HOME%\bin”,(其中“%JAVA_HOME%”的意思为刚才设置JAVA_HOME的值),也可以直接写上“C:\jdk1.6\bin”
三: 最后再点“新建”,然后在变量名上写classpath,该变量的含义是为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别。其值为“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\toos.jar (要加.表示当前路径)”,与相同“%JAVA_HOME%有相同意思” 检查JDK是否安装成功:
#java –version▪ Tomcat的配置部署
tomcat下载页面地址:
http://tomcat.apache.org/解压文件
▪ 部署DCS工程
把永中DCS工程目录复制到tomcat 的webapp目录下。
修改${tomcat.home}\conf\server.xml文件.在Host节点下增加如下参考代码:
<Context docBase="指向项目的根目录所在的路径" path="虚拟目录名" reloadable="true"/>
根据需要修改项目中 ${dcs.web}\WEB-INF\config.properties和log4j.properties的配置。需要在目录/usr/X11R6/lib/X11/fonts/TrueType下加入字体文件。
启动tomcat后,访问http://localhost:8080/dcs.web 即可看到“在线文档预览示例”页面。
▪ 安装nginx
nginx下载页面地址:
http://nginx.org/安装完成后对/usr/local/nginx/conf/nginx.conf 配置文件进行所需配置。
集群配置
按以上步骤在多台服务器上安装配置好tomcat 并启动,确认tomcat 启动成功,在nginx服务配置文件nginx.conf中进行集群相关配置。
例如三台服务器,其中192.168.1.100为ngnix服务器,192.168.1.101为第一台DCS服务器,192.168.1.102为第二台服务器,
则nginx.conf相关配置为:
#设定负载均衡的服务器列表
upstream tomcat_server { server 192.168.1.101:80; server 192.168.1.102:80; }
接口说明:
▪ 上传文档请求地址:
POST http://服务器地址/upload
例如:http://localhost:8080/dcs.web/upload
上传您要在线预览的文档。
参数:
file - 文件作为multi-part POST请求参数,用于上传本地文档 (必须)
convertType - 转换类型参数(必须)
▪ URL预览文档
请求地址:
POST http://服务器地址/onlinefile
参数:
downloadUrl - 文档URL,用于预览网络文档。此URL应为编码(UTF-8 URL-encoded)后的URL。
convertType - 转换类型参数
(cookie) - (非必传)下载文件所需的cookie信息
▪ 服务器本地转换
请求地址:
POST http://服务器地址/convert
参数:
inputDir - 文档在服务器上的路径(相对于配置文件中input的相对路径)
(mergeInput) - (非必传)使用文档合并功能时,需要合并的文档路径同inputDir,可传多个值,以英文,分隔
convertType - 转换类型参数
▪ html网页转pdf
请求地址:
POST http://服务器地址/htmltopdf
参数:
htmlurl - 需要转换的html地址
通用参数不适用于此接口
▪ 文档转swf
请求地址:
POST http://服务器地址/anytoswf
参数:
Type - upload/onlinefile/convert
isPic - 是否以图片形式展示 upload-文件上传参数:
file - 文件作为multi-part POST请求参数,用于上传本地文档 (必须)
onlinefile-Url下载参数:
downloadUrl - 文档URL,用于预览网络文档。此URL应为编码(UTF-8 URL-encoded)后的URL。
convert-服务器本地转换参数:
inputDir - 文档在服务器上的路径(相对于配置文件中input的相对路径)
通用参数不适用于此接口
▪ 获取授权码
请求地址:
http://服务器地址/getRegisterCode
▪ 查询版本及授权到期情况
请求地址:
http://服务器地址/queryInfo
▪ 查询实时可用实例个数
请求地址:
http://服务器地址/countConverter
<通用参数>
htmlName - 转换成html显示的文档名字(默认值:原文档名字)
htmlTitle - 转换成html显示的htmltitle名字(默认值:永中文档转换服务)
isCopy - 是否防复制(1是0否,默认0)
isShowAll - 是否一次性加载(1是0否,默认0(分页加载))
isZip - 是否提供打包下载(1是0否,默认0),返回值增加 zipUrl结果
isShowTitle - 是否显示文件名(1是0否,默认1)
isDelSrc - 是否删除源文件(1是0否,默认0)
isDelTarget - 是否删除生成的文件(1是0否,默认0,需要isZip为1时才生效)
isSourceDir - 是否在结果集中返回源文档相对路径
isShowList - 是否显示文档目录(1是0否,默认0)
showFooter - 是否显示页脚(1是0否)
encoding - 转换时所需要的编码(默认值:UTF-8)
password - 转换文档如有密码通过这个参数传入密码
callbackName - 用于跨域调用时设置回调函数的名字(会改变返回值的样式)
pages - 应用于转换成多个文件时(如MS到图片格式,转多个SVG),以 英文标识,逗号 分隔 ;-表示 范围 例如(1,3-5 表示 1,3,4,5)
position - 静态水印的位置(ofd预览) wmSize - 设置水印尺寸默认100(int类型)
wmContent - 设置水印文字内容默认水印
wmFont - 设置水印字体
wmSpace - 设置静态水印间距
wmTransparency- 设置静态水印透明度
wmSuspend-静态文件内容是否在文字上方还是下方,默认在下方,输入1是上方
wmRotate - 设置静态水印内容旋转角度
wmWord - word给word加入文字或图片水印,默认是不加,设置为1是加入水印
wmTileEffect - 是否是平铺效果,默认是的,0表示不是平铺(显示为一个水印)
wmRgb - 颜色是否使用rgb方式,默认是0,不选,1是使用
wmRgbRed - rgb红范围是0~255
wmRgbGreen - rgb绿范围是0~255
wmRgbBlue - rgb蓝 范围是0~255
zoom - 设置图片的缩放比例(默认1f)
wmColor - 设置水印颜色(int类型)
1,"黑色"、2,"蓝色"、3,"青色"、4,"深灰" 、5,"灰色"、6,"绿色"、7,"浅灰" 、8,"品红"、
9,"橙色"、10,"粉红"、11,"红色"、12,"白色" 、13,"黄色"
转换类型参数说明:
wmPicPath - 设置图片水印的图片路径(相对于配置文件中WmImagePath的相对路径)
acceptTracks - 是否显示文档批注(1显示0不显示)
isHideBlank - 是否隐藏空白(1隐藏0不隐藏)
isVertical - 是否竖排(1是0否,默认0)
isPrint - 是否显示打印(1是0否,默认1)
isDownload - 生成页面是否提供原文档下载(1是0否,默认0)
htmlPath - 自定义生成html中的相对路径
isShowNum - 是否显示总页数(1显示,0不显示,默认1)
dynamicMark - 动态水印内容
dmXextra - 动态水印x轴内容之间距离
dmYextra - 动态水印y轴内容之间距离
dmFontSize - 动态水印的文字大小
dmAlpha - 动态水印的透明度(范围是0到1)
dmAngle - 动态水印旋转角度
dmFont - 动态水印字体
dmColor - 动态水印颜色,rgb方式,如rgb(0,0,0),#000000
destinationName - 自定义生成的文件名(不需要后缀,不推荐使用)
appendPath - 自定义在设置的output路径的基础上追加路径(不推荐使用)
antiDownload - 生成页面是否防下载(1是0否,默认0)
isFullScreen - 是否全屏(1是0否,默认0)
pdfTitle - 设置生成pdf时pdf的标题
pdfAuthor - 设置生成pdf时pdf的作者
pdfSubject - 设置生成pdf时pdf的主题
pdfKeyword - 设置生成pdf时pdf的关键字
sourceReplace - 文档中需要被替换的内容,以英文,分隔
targetReplace - 文档中要替换的内容,以英文,分隔,和sourceReplace对应
isAsync - 是否后台异步转换
compressedSuffix - 压缩包后缀名
supportCache - 是否开启缓存(1是0否,默认0)
isShowGridline - 是否添加表格边框(1是0否,默认0)
isSignature - 是否进入签批模式(1是0否)
suffix - 传入后缀名(对于上传的文件没有后缀名,我们可以根据这个参数强制修改)
isRar5 - 是否使用rar5的方式解压
imageType;//图片转图片,生成图片的后缀名,默认是jpg
wordEdit;//word转word之后,设置是否可编辑,默认可以编辑,1不可以编辑
isFirstImage;//加入图片水印,设置是否是第一页加入,默认不是,为1时就是在第一页加入
isExcelWidth;//调整excel单元行的宽度,默认不调整,当为1时调整
isPdfBmp;//生成pdf是否是以绘图的方式,默认不是,设置为1是的
isAshPlacing;//对word生成word的红头文件做置灰处理,默认不置灰,1置灰
isPdfA4;//office格式生成pdf,设置每一页为A4大小,默认不是,1是
convertType参数取值说明:
0-----文档格式到高清html的转换 1-----文档格式到html的转换 2-----文档格式到txt的转换 3-----文档格式到pdf的转换 4-----文档格式到gif的转换 5-----文档格式到png的转换 6-----文档格式到jpg的转换 7-----文档格式到tiff的转换 8-----文档格式到bmp的转换 9-----pdf文档格式到gif的转换 10----pdf文档格式到png的转换 11----pdf文档格式到jpg的转换 12----pdf文档格式到tiff的转换 13----pdf文档格式到bmp的转换 14----pdf文档格式到html的转换 15----html文档格式到微软文档格式的转换 16----文档转换多个SVG返回分页加载页面(模版) 17----tif文件转成html 18----文档转换多个SVG 19----压缩文件到html的转换(模版) 20----PDF文件到html的转换(模版) 21----ofd文件到html的转换(模版) 22----两个doc文档合并 23----图片到html的转换 24----pdf文档格式到txt的转换 25----文档按页转换(高清版) 26----文档按页转换(标准版) 27----获取文档页码(MS文档) 28----获取pdf页码(PDF文件) 29----文档到ofd的转换 30----文档到html(图片)的转换 31----多个pdf文档合并 32----图片到pdf的转换 33----文档到文档的转换 34----pdf到pdf的转换 35----tif到html的转换(模板) 36----epub到html的转换(模板) //需要安装相应的客户端 37----indd格式到pdf的转换 38----cad格式到pdf的转换 39----psd格式到pdf的转换 40----ai格式到pdf的转换 41----cdr格式到pdf的转换 42----其它格式转换到pdf格式预览(高清模板) 43----文档格式到uof的转换 44----图片到图片的转换(默认是jpg) 45----视频到mp4的转换 46----获取ofd里面的内容 47----图片转ofd 48----ofd转ofd(主要是插入元数据) 49----ofd的合并 50----html格式到pdf转换 51----html格式到ofd的转换 52----其它格式转换到ofd格式预览(高清模板)返回参数说明: result - 返回代码,0成功,其他失败
message - 详细信息
data - 请求需要返回的数据
返回参数含义:
0-----转换成功 1-----找不到指定文档 2-----无法打开指定文档 3-----操作失败 4-----转换的文档为加密文档或密码有误,请重新添加password参数进行转换 5-----输出文档后缀错误 6-----授权文件过期 7-----转换超时,内容可能不完整 8-----无效参数 17-----上传失败 18-----下载文件失败 19-----文件过大 20-----下载成功 21-----删除失败 22-----获取文件信息失败 23-----URL编码失败 24-----生成文件名为空,有误或重名,请检查参数 25-----html转pdf转换失败 26-----获取授权码失败,请联系我们 27-----pdf转swf转换失败 28-----需要合并的文档不存在 29-----加密字符解码失败 30-----解压文件失败,该压缩文件不支持 31-----该文件转换异常已记录,转换失败 32-----服务器转换实例已用完,请稍后再试 33-----该文件是个空文件 34-----签批生成失败 35-----文件已被锁住,提交失败 36-----修改文件后缀名失败 37-----字节数组生成文件失败 38-----接收base64生成图片失败 39-----此ip无法预览例如:
成功状态下:{ "result":0,"data":"http://xxxx域名/文件地址","message":"转换成功" }
失败状态下: { "result":7, "":"上传失败" }
调用说明:
WEB调用
Web调用需要配置jquery组件,用到ajax,需要配置ajaxfileupload.js。web要视具体情况来编写代码,下面代码为核心调用部分。a) 上传本地文件转换代码示例
$('#upfilebtn2').fileupload({ url : 'upload', dataType : 'json', formData : { convertType : "0" },//如果需要额外添加参数可以在这里添加 done : function(e, data){ $.isLoading("hide"); }, });b) URL文档转换代码示例
$.ajax({ url : "onlinefile", data :{ "downloadUrl" : obj_value, "convertType" : "0" }, dataType : "json", type : "post", success : function(data){ $.isLoading("hide"); }, error : function(data){ $.isLoading("hide"); console.error(data) } });客户端调用
客户端调用接口,需要用POST请求,具体代码需要视开发语言而定,下面列举部分语言作为参考。
Java调用
Java 调用代码适用于J2SE及Java EE。需要用到的第三方工具包为:commons-logging-1.1.jar,httpclient-4.5.jar,httpcore-4.4.1.jar,httpmime-4.5.jar,如代码出现编译不过,请加入这四个包。
代码编译环境:Eclipse
import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.nio.charset.Charset; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.ParseException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; /** * @Description: DCS文档转换服务Java调用代码示例 * @author LB * @date 20151014 */ public class DCSTest { public static String sendPost(String serverurl,Map< String,String> param){ String result=""; List< NameValuePair> list = new ArrayList< NameValuePair>(); String fullurl =""; //请求参数 for(String key : param.keySet()) { list.add(new BasicNameValuePair(key, param.get(key))); } try{ fullurl = EntityUtils.toString(new UrlEncodedFormEntity(list, Consts.UTF_8)); }catch(Exception e){ result ="下载失败"; e.printStackTrace(); } HttpPost httpget = new HttpPost(serverurl+"?"+fullurl); CloseableHttpClient httpclient = HttpClients.createDefault(); try (CloseableHttpResponse response = httpclient.execute(httpget)){ if (response.getStatusLine().getStatusCode() == 200) { HttpEntity resEntity = response.getEntity(); byte [] josn = EntityUtils.toByteArray(resEntity); requestJson = new String(josn,"UTF-8"); EntityUtils.consume(resEntity); }else{ result="下载失败"; } } catch (Exception e) { result="下载失败"; e.printStackTrace(); } finally{ httpget.releaseConnection(); } return result; } /** * 向指定 URL 上传文件POST方法的请求 * * @param url 发送请求的 URL * @param filepath 文件路径 * @param type 转换类型 * @return 所代表远程资源的响应结果, json数据 */ public static String SubmitPost(String url, String filepath, String type) { String requestJson = ""; HttpClient httpclient = new DefaultHttpClient(); try { HttpPost httppost = new HttpPost(url); FileBody file = new FileBody(new File(filepath)); MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, Charset.forName("UTF-8")); reqEntity.addPart("file", file); // file为请求后台的File upload;属性 reqEntity.addPart("convertType", new StringBody(type, Charset.forName("UTF-8"))); httppost.setEntity(reqEntity); HttpResponse response = httpclient.execute(httppost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity resEntity = response.getEntity(); byte [] josn = EntityUtils.toByteArray(resEntity); requestJson = new String(josn,"UTF-8"); EntityUtils.consume(resEntity); } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); // requestJson = e.toString(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); // requestJson = e.toString(); } finally { try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) { } } return requestJson; } public static void main(String[] args) { // TODO Auto-generated method stub // 文件上传转换 String convertByFile = SubmitPost("http://dcs.yozosoft.com:80/upload", "C:/doctest.docx", "1"); // 网络地址转换 Map< String,String> map =new HashMap< String,String>(); map.put("downloadUrl", "http://hezoon.com:8080/doc/DCS产品介绍.docx"); map.put("convertType", "1"); String convertByUrl =sendPost("http://hezoon.com:8080/dcs.web/onlinefile",map); System.out.println(convertByFile); System.out.println(convertByUrl); } }httpclient4.x版本调用
//上传文件 public static String postParams(String url, String filepath, String type) { CloseableHttpClient httpclient = HttpClients.createDefault(); CloseableHttpResponse response = null; String result = null; try { HttpPost httpPost = new HttpPost(url); MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE); mEntityBuilder.setCharset(Charset.forName("UTF-8")); FileBody file = new FileBody(new File(filepath)); mEntityBuilder.addPart("file", file); StringBody comment = new StringBody(type, ContentType.APPLICATION_JSON); mEntityBuilder.addPart("convertType", comment); HttpEntity reqEntity =mEntityBuilder.build(); httpPost.setEntity(reqEntity); response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity resEntity = response.getEntity(); byte [] josn = EntityUtils.toByteArray(resEntity); result = new String(josn,"UTF-8"); EntityUtils.consume(resEntity); } } catch (Exception e) { e.printStackTrace(); } finally { HttpClientUtils.closeQuietly(httpclient); HttpClientUtils.closeQuietly(response); } return result; }
C++调用
C++调用,需要通过socket封装http请求,本例展示URL调用方法,文件上传类似。编译环境VS2005,win32控制台
// DCSTest.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include "DCSTest.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯一的应用程序对象 CWinApp theApp; #include iostream #include string #include Winsock2.h using namespace std; //函数声明 int httpPost(char* hostname, char* api, char* parameters); //方法调用 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs _tprintf(_T("Fatal Error: MFC initialization failed\n")); return 1; } httpPost("dcs.yozosoft.com", "http://dcs.yozosoft.com:80/onlinefile", "downloadUrl=http://img.iyo cloud.com:8000/doctest.docx&convertType=1"); system("pause"); return nRetCode; } /* *post 请求 *参数:hostname 域名 * api 接口 * parameters 参数,请求参数应该是name1=value1&name2=value2 的形式。 *返回:正确0,否则,错误代码 */ int httpPost(char* hostname, char* api, char* parameters) { WSADATA WsaData; WSAStartup(0x0101, &WsaData); //初始化socket struct hostent* host_addr = gethostbyname(hostname); if (host_addr == NULL) { cout<<"Unable to locate host"; return -103; } sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons((unsigned short)80); sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list); int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { return -100; } //建立连接 if (connect(sock, (const struct sockaddr *)&sin, sizeof(sockaddr_in) ) == -1) { cout<<"connect failed"; return -101; } //初始化发送信息 char send_str[2048] = {0}; //头信息 strcat(send_str, "POST "); strcat(send_str, api); strcat(send_str, " HTTP/1.1\r\n"); strcat(send_str, "Host: "); strcat(send_str, hostname); strcat(send_str, "\r\n"); strcat(send_str, "Connection: keep-alive\r\n"); char content_header[100]; sprintf(content_header,"Content-Length: %d\r\n", strlen(parameters)); strcat(send_str, content_header); strcat(send_str, "Cache-Control: max-age=0\r\n"); strcat(send_str, "Origin: http://dcs.yozosoft.com\r\n"); strcat(send_str, "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like G ecko) Chrome/15.0.849.0 Safari/535.1\r\n"); strcat(send_str, "Content-Type: application/x-www-form-urlencoded\r\n"); strcat(send_str, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r \n"); strcat(send_str, "Referer: http://dcs.yozosoft.com/\r\n"); strcat(send_str, "Accept-Encoding: gzip,deflate,sdch\r\n"); strcat(send_str, "Accept-Language: zh-CN,zh;q=0.8\r\n"); //内容信息 strcat(send_str, "\r\n"); strcat(send_str, parameters); if (send(sock, send_str, strlen(send_str),0) == -1) { cout<<"send failed"; return -101; } //获取返回信息 char recv_str[4096] = {0}; if (recv(sock, recv_str, sizeof(recv_str), 0) == -1) { cout<<"recv failed"; return -101; } cout<<"recv_str"; WSACleanup( ); return 0; }
PHP调用
Ⅰ URL Post请求$url="http://dcs.yozosoft.com/onlinefile"; $uri="http://dcs.yozosoft.com/example/doc/doctest.docx"; $response=onlinefile($url, $uri); echo $response; function onlinefile($url, $uri) { $data=array('downloadUrl'=> 'http://dcs.yozosoft.com/example/doc/doctest.docx','convertType'=> '1'); $data = http_build_query($data); $params = array('http' => array( 'method' => 'POST', 'content' => $data ) ); print_r($params); $ctx = stream_context_create($params); $fp = file_get_contents($url, false, $ctx); if (!$fp) { return false; } return $fp; }Ⅱ 上传文件
function send_file($url, $post = '', $file = '') { $eol = "\r\n"; $mime_boundary = md5 ( time () ); $data = ''; $confirmation = ''; date_default_timezone_set ( "Asia/Beijing" ); $time = date ( "Y-m-d H:i:s " ); $post ["filename"] = $file [filename]; foreach ( $post as $key => $value ) { $data .= '--' . $mime_boundary . $eol; $data .= 'Content-Disposition: form-data; '; $data .= "name=" . $key . $eol . $eol; $data .= $value . $eol; } $data .= '--' . $mime_boundary . $eol; $data .= 'Content-Disposition: form-data; name=' . $file [name] . '; filename=' . $file [fi lename] . $eol; $data .= 'Content-Type: text/plain' . $eol; $data .= 'Content-Transfer-Encoding: binary' . $eol . $eol; $data .= $file [filedata] . $eol; $data .= "--" . $mime_boundary . "--" . $eol . $eol; $params = array ('http' => array ('method' => 'POST', 'header' => 'Content-Type: multipart/ form-data;boundary=' . $mime_boundary . $eol, 'content' => $data ) ); $ctx = stream_context_create ( $params ); $response = file_get_contents ( $url, FILE_TEXT, $ctx ); return $response; }
C#调用
Ⅰ URL Post请求public string HttpPost(string Url, string postDataStr) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr); request.CookieContainer = cookie; Stream myRequestStream = request.GetRequestStream(); StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); myStreamWriter.Write(postDataStr); myStreamWriter.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.Cookies = cookie.GetCookies(response.ResponseUri); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; }Ⅱ 上传文件
public static string HttpUploadFile(string url, string path, int Content_Type){ FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); byte[] bArr = new byte[fs.Length]; fs.Read(bArr, 0, bArr.Length); fs.Close(); int pos = path.LastIndexOf("\\"); string fileName = path.Substring(pos + 1); string boundary = "Boundary-b1ed-4060-99ls-fca7ff59c113"; //Could be any string string Enter = "\r\n"; //part 1 注意 filename 不支持中文 string part1 = "--" + boundary + Enter + "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; filename=\"" + "fileName.doc" + "\"; name=\"file\"" + Enter + Enter; //part 2 string part2 = Enter + "--" + boundary + Enter //+ "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; name=\"convertType\"" + Enter + Enter + Content_Type + Enter //以下是我们的通用参数 //start + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"edcoding\"" + Enter + Enter + "utf-8" + Enter //end //start /* + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"htmlTitle\"" + Enter + Enter + "ZnuotechWord" + Enter //end //start + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"isShowTitle\"" + Enter + Enter + "0" + Enter //end //start + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"showFooter\"" + Enter + Enter + "0" + Enter */ //end + "--" + boundary + "--"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "multipart/form-data;boundary=" + boundary; Stream myRequestStream = request.GetRequestStream(); myRequestStream.Write(Encoding.UTF8.GetBytes(part1.ToString()), 0, part1.Length); myRequestStream.Write(bArr, 0, bArr.Length); myRequestStream.Write(Encoding.UTF8.GetBytes(part2.ToString()), 0, part2.Length); myRequestStream.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); //log(retString); myStreamReader.Close(); myResponseStream.Close(); return retString; } static void Main() { string url = "http://localhost:8080/dcs.web/upload"; string data = "C:/1.txt"; string result = HttpUploadFile(url, data, 1); Console.WriteLine(result); } }
JVM调优说明 :
关于DCS中实例数的设置:我们一般推荐客户按照服务器的硬件条件来设置例如服务器可用为4核配8G内存,并发可设置4-8个,我们推荐1核1g内存设置1个并发实例
tomcat的性能优化:
根据设置的实例数和服务器剩余内存数来设置jvm的内存设置
Ⅰ window下:
在window下的tomcat/bin下的catalina.bat中首行加入set JAVA_OPTS=-Xms***m -Xmx***m
Ⅱ Linux下:
在linux下的tomcat/bin下的catalina.sh中首行加入JAVA_OPTS="$JAVA_OPT -Xms***m -Xmx***m"
其中Xms表示启动所需最小内存,Xmx表示可用最大内存,***根据实际情况设置
DCC组件
永中文档转换组件(Document Conversion Component,简称DCC)通过解析常用办公文档的格式,提供不同文档格式间的互转,实现常用格式文档的阅读等服务。永中DCC 主要部署在网络服务器上,如Web 服务器、邮件服务器等,提供用户文档阅读及批量文档转换功能。永中DCC 支持阅读和转换的文档格式非常丰富,涵盖微软Office 97~2013等常用文档格式,同时可根据用户需求进行特定格式的合作。运行环境:
a) 操作系统:任何可以安装sun 标准版jre的Windows/ Linux
b) 安装软件要求:
机器必须安装java运行环境
c) Linux下特殊要求(转图片,转pdf时需要):
需要添加中文字体文件比如:yzdwsj6.ttf
配置:
a)Config放置在Yozo_Office.jar同一目录下,且文件名字不可随意更改b)EMedia.jar、jai_codec.jar、jai_core.jar等为引用包,开发调试时请导入工程
类介绍:
a) applicaton.dcs.Convert类文档转换引擎对象,支持多线程,提供各种转换方法。
b) applicaton.dcs.IPICConvertor接口
文档转换图片接口,提供了丰富的转图片方法。转图片前预先可知图片数量,图片大小。
c) 接口API介绍
//方法返回错误代码convertMStoPic方法,convertPDFtoPic方法 int resultcode(); //获取转换的图片数量 int getpagecount() //每页的100%真实的宽高 float[][] getAllpagewheigths() //起始页,结束页,缩放值,转换存放的文件夹,起始页从0开始。假设起始页==结束页,则只转换1页。如果结束页为-1,则转换所有。生成的文件名。页码+后缀名,从1开始,zoom范围0.1f-5.0f int converttoGIF(int start,int end,float zoom, String tarfoldname) int converttoPNG(int start,int end,float zoom, String tarfoldname) int converttoJPG(int start,int end,float zoom, String tarfoldname) int converttoTIFF(int start,int end,float zoom, String tarfoldname) int converttoBMP(int start,int end,float zoom, String tarfoldname) //关闭,内存回收 void close()
API介绍:
构造器:Convert() 默认构造器
Convert(String path)
参数:path Config文件夹的路径,默认是放置在Yozo_Office.jar同一目录下
下面通过程序实例来介绍其主要方法。
API:
int convertMStoHTML (String sourceFileName,String targetFileName)
功能:该接口实现指定MS文件到html文件的转换(标清版本)
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
targetFileName目标文件绝对路径
返回值:
0-----转换成功 1-----传入的文件,找不到 2-----传入的文件,打开失败 3-----转换过程异常失败 4-----传入的文件有密码 5-----targetFileName的后缀名错误使用范例:
String sourceFileName = "D:/test/input/a.doc"; String targetFileName = "D:/test/output/a.htm"; Convert convert = new Convert(); convert.convertMStoHTML (sourceFileName, targetFileName);运行结果:将D:/test/input/路径下a.doc文件转换为对应的htm文件,存放到D:/test/output文件夹下
API:
int convertMStoHtmlOfSvg (String sourceFileName,String targetFileName)
功能:该接口实现指定MS文件到html文件的转换(高清版本)
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
targetFileName目标文件绝对路径
返回值:
0-----转换成功 1-----传入的文件,找不到 2-----传入的文件,打开失败 3-----转换过程异常失败 4-----传入的文件有密码 5-----targetFileName的后缀名错误使用范例:
String sourceFileName = "D:/test/input/a.doc"; String targetFileName = "D:/test/output/a.htm "; Convert convert = new Convert(); convert. convertMStoHtmlOfSvg (sourceFileName, targetFileName);运行结果:将D:/test/input/路径下a.doc文件转换为对应的htm文件,存放到D:/test/output文件夹下
API:
IHtmlConvertor convertMStoHtml(String srcfilename)
功能:该接口实现指定MS文件到html转换器
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
返回值:实现IHtmlConvertor接口对象
使用范例:
String sourceFileName = "D:/test/input/a.doc"; String targetFileDir = "D:/test/output "; Convert convert = new Convert(); IHtmlConvertor html = convert. convertMStoHtml (sourceFileName); int resultcode = html. resultcode(); if(resultcode == 0) { html. convertToHtml(0,1,targetFileDir) } html.close();运行结果,a.doc文档,其中前2页转换成html。网页存放的目录为D:/test/output
API:
int convertMStoTXT (String sourceFileName,String targetFileName)
功能:该接口实现指定MS文件到txt文件的转换
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
targetFileName目标文件绝对路径
返回值:
0-----转换成功 1-----传入的文件,找不到 2-----传入的文件,打开失败 3-----转换过程异常失败 4-----传入的文件有密码 5-----targetFileName的后缀名错误使用范例:
String sourceFileName = "D:/test/input/a.doc"; String targetFileName = "D:/test/output/a.txt "; Convert convert = new Convert(); convert. convertMStoTXT (sourceFileName, targetFileName);运行结果:将D:/test/input/路径下a.doc文件转换为对应的txt文件,存放到D:/test/output文件夹下
API:
int convertMStoPDF (String sourceFileName,String targetFileName)
功能:该接口实现指定MS文件到PDF文件的转换
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
targetFileName目标文件绝对路径
返回值:
0-----转换成功 1-----传入的文件,找不到 2-----传入的文件,打开失败 3-----转换过程异常失败 4-----传入的文件有密码 5-----targetFileName的后缀名错误使用范例:
String sourceFileName = "D:/test/input/a.doc"; String targetFileName = "D:/test/output/a.pdf "; Convert convert = new Convert(); convert. convertMStoPDF (sourceFileName, targetFileName);运行结果:将D:/test/input/路径下a.doc文件转换为对应的htm文件,存放到D:/test/output文件夹下
API:
boolean convertHTMLtoMS (String sourceFileName,String targetFileDir)
功能:该接口实现指定html文件到MS文件的转换
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
targetFileDir目标文件夹绝对路径
返回值:true,转换成功,false 转换失败
使用范例:
String sourceFileName = "D:/test/input/a.html"; String targetFileDir = "D:/test/output "; Convert convert = new Convert(); convert. convertHTMLtoMS (sourceFileName, targetFileDir);运行结果:将D:/test/input/路径下a.html文件转换为对应的MS文件(doc或者xls或者ppt,转换成何种格式由程序智能判别,无须指定),存放到D:/test/output文件夹下
API:
IPICConvertor convertMStoPic(String srcfilename)
功能:该接口实现指定MS文件到图片转换器
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
返回值:实现IPICConvertor接口对象
使用范例:
String sourceFileName = "D:/test/input/a.doc"; String targetFileDir = "D:/test/output "; Convert convert = new Convert(); IPICConvertor picc = convert. convertMStoPic (sourceFileName); int resultcode = picc. resultcode(); if(resultcode == 0) { picc. converttoGIF(0,2,0.5f,targetFileDir) } picc.close();运行结果,a.doc文档,其中2页转换成图片,图片比率是0.5。图片存放的目录为D:/test/output
API:
int convertPdfToHtml(sourceFileName, targetFileDir)
功能:该接口实现指定pdf文件到html文件的转换
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
targetFileName目标文件绝对路径
返回值:
0-----转换成功 1-----传入的文件,找不到 2-----传入的文件,打开失败 3-----转换过程异常失败 4-----传入的文件有密码 5-----targetFileName的后缀名错误使用范例:
String sourceFileName = "D:/test/input/a.pdf"; String targetFileDir = "D:/test/output/a.html"; Convert convert = new Convert(); convert.convertPdfToHtml(sourceFileName, targetFileDir);运行结果:将D:/test/input/路径下a.pdf文件转换为对应的html文件,存放到D:/test/output文件夹下
API:
IPICConvertor convertPDFtoPic(String srcfilename)
功能:该接口实现指定PDF文件到图片转换器,目前只支持转换成png
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
返回值:实现IPICConvertor接口对象
使用范例:
String sourceFileName = "D:/test/input/a.pdf"; String targetFileDir = "D:/test/output "; Convert convert = new Convert(); IPICConvertor picc = convert. convertPDFtoPic (sourceFileName); int resultcode = picc. resultcode(); if(resultcode == 0) { picc. converttoPNG(0,2,0.5f,targetFileDir) } picc.close();运行结果,a.pdf文档,其中2页转换成图片,图片比率是0.5。图片存放的目录为D:/test/output
API:
int convert (String sourceFileName,String targetFileName)
功能:该接口实现指定通用文档(微软、永中、中文办公)到目标文档(HTML/PDF/UOF/TXT/CSV/图像/EIO)的转换
参数:sourceFileName 源文件绝对路径(包含文件名和后缀名)
targetFileName目标文件绝对路径(包含文件名和后缀名)
返回值:
0-----转换成功 1-----传入的文件,找不到 2-----传入的文件,打开失败 3-----转换过程异常失败 4-----传入的文件有密码 5-----targetFileName的后缀名错误使用范例:
String sourceFileName = "D:/test/input/a.doc"; String targetFileName = "D:/test/output/a.txt "; Convert convert = new Convert(); convert. convert (sourceFileName, targetFileName);运行结果:将D:/test/input/路径下a.doc文件转换为对应的txt文件,存放到D:/test/output文件夹下
其他API:
注意:这些接口在调用转换方法之前有效
例如:
String sourceFileName = "D:/test/input/a.doc"; String targetFileName = "D:/test/output/a.txt "; Convert convert = new Convert(); convert.setAcceptTracks(true); convert. convert (sourceFileName, targetFileName);setAcceptTracks
文档中设置转换后的文档是否显示修订标记,此方法目前只针对word类型的文档有效
setConvertForPhone
转换后的文档是否适用于手机显示,此方法目前只适用于转换后的html文档
setConvertOneSheet
设置是否只转换第一张工作表,此方法只针对Excel类型的文档有效
setCssOutside
设置用户指定的css文档,此方法只针对ppt类型的文档有效
setEmptyCount
Excel转html的空行转换方法:在转换时,需要对文档中每个单元格的内容进行检查,如果本列中所有单元格都无内容,则继续向后检查,若连续20列没有数据,则20列以后的表格将不需要转换;同时,也需要对单元格中每行的数据进行检测,如果有一行中所有单元格都无内容,继续向后检查,译若连续50行没有数据,则50行以后的表格将不需要转换,此方法只针对Excel类型的文档有效
setFilePermission
设置是否放开转换后的文件权限,针对某些linux系统没有文件的全部访问权限
setFileterHtml
设置转换后的文档是否为筛选后的网页,此方法目前只针对word类型的文档有效
setHtmlEncoding
设置转换后的html文档的编码
setOpenPsw
设置转换时文档的密码,此方法针对有密码的文档有效
setTempPath
文档转换中会产生一些临时文件,此方法可以设置临时文件的存放路径,若不设置,程序会取一个默认路径,如“C:\Documents and Settings\Administrator\Application Data\Yozo_Office”
deleteTempFiles
此方法用于清空临时文件,可在文档转换结束后调用
close
此方法用于清空占用资源
多线程转换:
a) 多线程请使用applicaton.dcs.Convert对象b) 可以用一个Convert池,维护N个convert实例对象,供多线程重复调用(每次new Convert有性能损耗)。
实例代码:
/** * @(#)ConvertorPool.java, Sep 14, 2009. * * Copyright 2009 Yozo, Inc. All rights reserved. */ import java.util.ArrayList; import application.dcs.Convert; /** * @author admin */ public class ConvertorPool { private ConvertorPool() {} private static final ConvertorPool instance = new ConvertorPool(); private ArrayList<ConvertorObject> pool = new ArrayList(); //池内维护了最大为5个实例,可以根据自己的服务器性能调整最大值 private static final int maxSize = 5; private int availSize = 0; private int current = 0; public static ConvertorPool getInstance() { return instance; } //获取池内一个转换实例 public synchronized ConvertorObject getConvertor() { if (availSize > 0) { return getIdleConvertor(); } else if (pool.size() < maxSize) { return createNewConvertor(); } else { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } return getConvertor(); } } //使用完成需要还给池内 public synchronized void returnConvertor(ConvertorObject convertor) { for (ConvertorObject co : pool) { if (co == convertor) { co.available = true; availSize++; notify(); break; } } } private synchronized ConvertorObject getIdleConvertor() { for (ConvertorObject co : pool) { if (co.available) { co.available = false; availSize--; return co; } } return null; } private synchronized ConvertorObject createNewConvertor() { ConvertorObject co = new ConvertorObject(++current); co.convertor = new Convert(); co.available = false; pool.add(co); return co; } //包装convert类,可记录是否在使用中 public class ConvertorObject { public ConvertorObject(int id) { this.id = id; } public int id; public Convert convertor; public boolean available; } } public static void main(String[] args) { // 线程内调用代码: ConvertorObject convertobj = ConvertorPool.getInstance().getConvertor(); convertobj.convertor.convertMStoHTML("D:/2.txt", "D:/1.html"); //资源的释放 ConvertorPool.getInstance().returnConvertor(convertobj); }
JVM的配置:
a) –Xmx设置尽量大b) -XX:ThreadStackSize(windows下需要配置)
c) 举例 1.5G内存机器:
-Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M -XX:ThreadStackSize=4096 -noverifyd) 参数说明:
-Xmx:java heap最大值,使用的最大内存 -Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些 -XX:PermSize:设定内存的永久保存区域 -XX:MaxPermSize:设定最大内存的永久保存区域 -XX:ThreadStackSize::线程堆栈大小 -noverify:关闭检验bytecode
特殊说明:
第一次调用转换,class类装载,对象需要实例化,因此较慢,第二次调用转换,速度开始正常化。其他问题
常见问题:
需要在目录/usr/X11R6/lib/X11/fonts/TrueType下加入相应的字体文件
需要增加jvm的启动参数, 比如 2G内存机器可以设置以下的内存参数:-Xms512m -Xmx1024m-XX:PermSize=128M -XX:MaxPermSize=256M
No X11 DISPLAY variable was set, but this program performed an operation which requires it. 异常 增加jvm的启动参数: -Djava.awt.headless=true
需要在初始化Convert对象时传入授权文件目录的路径,比如new Convert(“/home/Config”)
请确认是否使用的是试用版本,因为试用版本是有试用时间的
转换过程中会产生一些临时文档,可以通过Convert.setTempPath()方法设置临时目录的地址,或者转换后调用Convert.deleteTempPath()方法清除这些临时文件
支持,并发数一般是cpu核数的1-2倍,可以用对象池去管理Convert对象。我们接口文档介绍中有关于对象池的例子
在系统文件/etc/security/limits.conf中修改这个数量限制, 在文件最后中加入内容:
* soft nofile 65536
* hard nofile 65536
tomcat启动时加入:-XX:ReservedCodeCacheSize=512m
替换${java_home}/jre/lib/security/ 下面的local_policy.jar和US_export_policy.jar,下载地址为http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
在tomcat的/conf/context.xml中的