Linux下实现文档在线浏览

使用php实现百度文库功能,网上搜索到的方案,实现doc转pdf,pdf转swf,然后显示出来。

这里简单的记录下,【doc转pdf,pdf转swf】两个功能的搭建流程。

doc转pdf

使用到下列程序(文件):

  1. Apache OpenOffice
  2. 字体文件(windows系统C:\Windows\Fonts目录下的文件)
  3. JAVA环境(>=1.6)
  4. jodconverter

实现原理:调用jodconverter的包转换doc为pdf,而jodconverter会去连接OpenOffice的soffice服务,实现转换。

两者在运行时都需要java环境的支持!而字体文件可以解决doc转为pdf时中文乱码问题!

字体文件需要自行打包Windows系统下字体文件(也许可以全部打包),先上传到服务器上,后面会用到,假设文件名为fonts.zip

安装java环境

JAVA环境的安装很简单,首先需要确认下系统中是否安装了java,并且确认java版本>=1.6。

#直接输入java -version
java -version

#如果安装了java,将会显示java的版本,如果么有,那赶紧安装吧!

安装方法可以使用yum安装,或者在java.com上下载rpm包、解压即用的压缩包。这里我使用解压即用的压缩包。

java.com界面截图:

我把文件放在/opt/java/jre下,那么可以这样来显示下java的版本:

/opt/java/jre/bin/java –version

添加环境变量:

vim /etc/profile

#在文件内容最后写上:
 PATH=/opt/java/jre/bin:$PATH
 export PATH

#保存退出后,使用source使环境变量立即生效
source /etc/profile

这样java环境的搭建就完成了!

安装openoffice

注意,最新的openoffice 3.4.1版本不再捆绑java环境,所以需要手动搭建java环境。

首先,下载最新的openoffice安装包,地址:http://www.openoffice.org/download/other.html#tested-full,选择适合自己的版本:

安装包大概140多M大小,我选择的简体中文,Linux86_64 RPM包的文件名为:Apache_OpenOffice_incubating_3.4.1_Linux_x86-64_install-rpm_zh-CN.tar.gz

安装其实非常的简单:

#进入解压后的RPMS目录
cd /opt/setup/openoffice-setup/zh-CN/RPMS

#使用rpm命令安装
rpm -ivh *.rpm

安装截图:

默认安装在/opt目录下,有两个文件夹:openoffice.org和openoffice.org3。

现在我们需要把已经准备好的字体文件fonts.zip解压到这个目录下:/opt/openoffice.org/basis3.4/share/fonts/truetype

解压完成后,OpenOffice环境就已经完成了,现在让我们来启动openoffice。

我在/opt/openoffice.org3/目录下新建了文件:sofficed。

内容为:

#! /bin/bash
/opt/openoffice.org3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

记得修改sofficed文件的权限为755,便于程序调用执行!

#启动openoffice
/opt/openoffice.org3/sofficed

#将上面的命令写入/etc/rc.local文件中,即可开机启动了!

检查是否成功启动:

#进程查看
ps -ef | grep soffice

#端口查看
netstat -tunlp | grep 8100

若能看到soffice相关信息便成功了!

安装jodconverter

此货的安装也很简单,下载安装包,解压即可!

下载地址:http://sourceforge.net/projects/jodconverter/files/JODConverter/

我把文件放在了/opt/jodconverter下。

测试doc转pdf

当然了,首先得准备一个doc文件,然后使用下面这个命令测试:

java -jar /opt/jodconverter/lib/jodconverter-cli-2.2.2.jar doc文件路径 pdf文件路径

下载生成的pdf文件,打开看看吧。

pdf转swf

使用到的程序(文件)

  1. swftool
  2. xpdf-chinese-simplified
  3. font.zip

pdf转swf的过程相对简单一点,只需要调用swftool程序的pdf2swf程序,xpdf-chinese-simplified和font.zip可以解决中文乱码问题!

swftool程序需要编译安装,这里先固定一下安装目录为:/opt/swftool。

字体文件安装

下载xpdf-chinese-simplified和font.zip文件,然后解压。

mkdir /opt/swftool

cd /opt/swftool

wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz
wget http://www.nginxs.com/download/font.zip

#解压两个压缩包
tar zxvf xpdf-chinese-simplified.tar.gz

unzip font.zip 

#将font.zip解压出来的两个字体文件移到xpdf-chinese-simplified/CMap/目录下
mv Gbsn00lp.ttf gkai00mp.ttf xpdf-chinese-simplified/CMap/

#修改xpdf-chinese-simplified目录下的add-to-xpdfrc文件,内容如下:
cidToUnicode    Adobe-GB1       /opt/swftool/xpdf-chinese-simplified/Adobe-GB1.cidToUnicode
unicodeMap      ISO-2022-CN     /opt/swftool/xpdf-chinese-simplified/ISO-2022-CN.unicodeMap
unicodeMap      EUC-CN          /opt/swftool/xpdf-chinese-simplified/EUC-CN.unicodeMap
unicodeMap      GBK             /opt/swftool/xpdf-chinese-simplified/GBK.unicodeMap
cMapDir         Adobe-GB1       /opt/swftool/xpdf-chinese-simplified/CMap
toUnicodeDir                    /opt/swftool/xpdf-chinese-simplified/CMap
displayCIDFontTT Adobe-GB1      /opt/swftool/xpdf-chinese-simplifies/CMap/gkai00mp.ttf

字体文件安装完成。

Swftool安装

首先安装下swftool必要的插件程序

yum install zlib-devel libjpeg-devel giflib-devel freetype-devel

如果安装过了,自动忽略掉,只安装没有的。

开始安装swftool:

tar vxzf swftools-2012-10-15-1307.tar.gz

cd swftools-2012-10-15-1307

./configure --prefix=/opt/swftool

make

make install

如果没有异常信息,那就ok了。

测试pdf转swf

使用这个命令测试,同样在使用php代码时也可以这么调用:

/opt/swftool/bin/pdf2swf -o swf文件路径 -T -z -t -f pdf文件路径 -s languagedir=/opt/swftool/xpdf-chinese-simplified -s flashversion=9

需要注意languagedir这个参数。

其他的好像没什么了,就这么简单。

参考了这些文章:http://www.itokit.com/2012/0914/74747.html

关于PHP中执行exec函数

如果开启了Selinux,那么在exec函数中调用/var/www/html外的文件很容易被禁止,导致exec函数执行失败。

关闭Selinux:

#临时关闭
setenforce 0

#永久关闭
vim /etc/sysconfig/selinux
#将SELUNX的值修改为disabled,重启生效
SELINUX=disabled

不关闭selinux,那么就要修改所调用文件的安全环境上下文。

这里调用java时被selinux阻止了,那么可以这么做:

cd /opt

#将java目录的安全环境上下文还原
restorecon -R -v java

这样Seliux就不会再阻止httpd程序访问java程序了。

转载自:http://my.oschina.net/lijialong/blog/109499?fromerr=BgixkJut

------------------------

页面展示采用Flexpaper

要注意的是flexpaper引用的swf文件存放目录要设置好,flexpaper.js文件中有变量指向flexpaper应用的swf文件。

 window[instance] = flashembed(id, {
        src : _jsDirectory+"../FlexPaperViewer.swf",
        version : [10, 0],
        expressInstall : "js/expressinstall.swf",
        wmode : _WMode
    }

目录结构:

index.jsp内容:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <base href="<%=basePath%>">
        <title>My JSP ‘index.jsp‘ starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="description" content="This is my page">

        <link rel="stylesheet" type="text/css" href="css/flexpaper.css" />
        <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>
    </head>
    <body>
        <div id="documentViewer" class="flexpaper_viewer" style="width:770px;height:500px"></div>
        <script type="text/javascript">
            var startDocument = "Paper";
            $(‘#documentViewer‘).FlexPaperViewer(
                { config : {
                    SWFFile : ‘swf/aa.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>
        </body>
</html>

转载自:http://my.oschina.net/u/872813/blog/206780

补充:windows下仿百度文库实现在线文档浏览

windows下开发仿百度的功能相对简单一些。只是java代码调用服务器windows上安装的软件,将doc等文件转化为swf文件。

由于在开发环境下flashpaper不支持64位的系统,所以用print2flash代替flashpaper,功能效果一样。

注:print2flash转化得到的swf文件用flexpaper无法显示。

  • java调用print2flash的代码如下:
String cmd = "F:/Program Files (x86)/Print2Flash3/p2fServer.exe E:/aa.doc E:/aa.swf";
try {
    // 创建进程,并执行
    Process pro = Runtime.getRuntime().exec(cmd);
    pro.waitFor();
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
  • 转化后的swf文件只需要浏览器安装flashplayer插件就可以打开了,在页面标签内无需使用flexpaper这样的工具。页面调用swf文件代码如下:
<embed height="510" width="660" src="swf/aa.swf" loop="true" quality="1" type="application/x-shockwave-flash" />

转载自:http://my.oschina.net/u/872813/blog/201246?fromerr=aCsKh5yf

问题:

1. 在安装swftools时,如果出现
    modules/.././types.h:39:2: 错误:#error "no way to define 64 bit integer"
    modules/.././types.h:42:2: 错误:#error "don‘t know how to define 32 bit integer"
    modules/.././types.h:45:2: 错误:#error "don‘t know how to define 16 bit integer"
    modules/.././types.h:48:2: 错误:#error "don‘t know how to define 8 bit integer"

执行:ldconfig /usr/local/lib 然后重新执行./configure 和make然后make install
其他可能出现的问题:
可能是 缺少gcc或者g++
执行:yum install gcc-c++
最终可能出现的问题:
make[1]: *** [install] 错误 1
make[1]: Leaving directory `/opt/openoffice4/swftools-0.9.2/swfs‘
make: *** [install] 错误 2
并不是所有电脑都出现该问题,google后给出的结果是还缺少其他依赖,但是已经不影响,在终端执行:pdf2swf出现相关信息,证明我们最终需要的命令pdf2swf已经可用。

特别注意编译器的安装,如gcc-c++等。

时间: 2024-11-29 02:11:42

Linux下实现文档在线浏览的相关文章

Java模拟实现百度文档在线浏览

Java模拟实现百度文档在线浏览 这个思路是我参考网上而来,代码是我实现. 采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper浏览. ok, A.下载OpenOffice (转换资源文件) B.下载JodConverter(调用OpenOffice) C.下载Swftools(Pdf2Swf) D.下载 FlexPaper(浏览swf文件) 这里我已经全部下载好了,大家只需要下载:http://down.51cto.com

sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法

昨晚配置完成office web apps 2013的外部网络访问之后,今天发现了一个很奇怪的问题,就是IE 11不支持文档在线浏览,找了很多方法,打补丁什么的,都不管用,最后在预览文件的页面,看到<head>标签,里面有一句代码: <meta http-equiv="X-UA-Compatible" content="IE=99" /> 我把他改成了 <meta http-equiv="X-UA-Compatible&quo

php实现word文档在线浏览功能,配置安装手记

一般类似oa或者crm等管理系统可能都会遇到需要再线查看word文档的功能,类似百度文库. 记得去年小组中的一个成员负责的项目就需要这个的功能,后面说是实现比较困难,就将就着用chm格式替代了.今天看到网上一遍文章<LINUX下面PHP文件转换>,介绍怎么样在linux下使用Openoffice 3 , Pdf2Swf tool , Jodconverter , FlexPaper,实现文档在线查看. 自己再ubuntu下进行的尝试安装,步骤如下: 因为ubuntu版本为10.0.4,open

FlexPaper实现文档在线浏览(附源码)

园子里也有关于FlexPaper的文章,但都不怎么详细. 没有较全的参数说明.就连官方网站都没有.没法,最后只得将swf文件反编译后查看了源码才将里面的参数全部弄出来. 好了,废话不多说,开始正题. 1. 概述 FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用, 使在浏览器中显示PDF成为可能,而这个过程并无需PDF软件环境的支持. 另外也可以通过将一些例如Word.PPT等文档转成PDF,然后实现在线浏览. 2. 实现步骤 文档(PDF,Wo

Linux下查看文档指令

1,cat直接查看 cat /etc/profile 2,more,less分页查看 less  /etc/profile more /etc/profile less -N /etc/profile 显示行号 内容 3,tail head从尾部或头部查看 head -n 10 /etc/profile  显示前10行内容 tail -n 10 /stc/profile   显示后10行的内容 tail /etc/profile 显示后10行内容,如果文档增加内容,默认显示,此指令显示日志非常好

linux下的文档处理及tar命令

1.使用cat命令进行纵向合并 使用‘>’是将左边的内容覆盖到右边 使用‘>>’是将左边的内容追加到右边文档中 还可使用‘>’将不同文件进行合并 2.管道符‘|’统计行数 使用wc -l直接计算行数 管道符计算单个文件的行数 计算多个文件合并后的行数 3.tar命令打包文件(注意参数不带-,比如cvf,不能是-cvf) c创建一个新的tar文件 v显示所打包文件的详细信息 f指定归档文件或磁盘 t列出tar文件目录内容 x从tar文件中抽取内容 z使用gzip算法来压缩文件 j使用

轻松便捷的文档在线预览工具

北京博信施科技有限公司是一家专注于Office文档在线预览及PDF文档在线预览服务的专业提供商,依据HTML标准的4.01版本规范,研制开发出Microsoft Word.Excel.Powerpoint文档转换HTML文件格式以及Adobe PDF文件转换HTML文件格式的软件产品.实现Microsoft Word文档在线预览.Excel表格在线预览.Powerpoint演示文档在线预览及Adobe PDF文档在线预览,完美呈现Microsoft Office及Adobe PDF文档原始样式和

笔记——文档在线阅读的解决方案(未完待续)

目前现在很多大型的网站或是某些项目需要让用户上传的文档可以在线预览.这个目前我所了解到的有以下几种情况: 1.pdf 在线阅读 2.office 在线阅读 对于pdf目前有很多解决方案了,可以参考 http://www.open-open.com/news/view/1fc3e18  ,对于office在线阅读,目前.我的办法是,先转换为PDF,然后使用pdf在线阅读的方式进行浏览.目前好像很多站点都是这么做的. 然而,我在项目中,这类文档在线阅读方案是这样的.OFFICE --> PDF  -

office文档在线预览 (doc、docx、ppt、pptx、xls、xlsx)

要想实现office文档在线预览,可以使用红樱枫软件公司开发的数据格式转换软件HTML Filter,该产品可以以程序库的形式提供给用户,提供各种程序接口,如:C/C++.Java..Net等接口,供用户将软件镶嵌在自己的系统中.通过调用本产品的提供的API功能接口,实现MS Office系列文档到HTML的快速转换.本产品在国内外得到了广泛的应用,在国内有腾讯.搜狐等多家知名企业使用本产品.对多种文档进行统一管理,编辑,检索和浏览.用户可以使用本产品,十分便利的将office文档Word,Ex