php文库系统解决方案(仿百度、豆丁文库系统)
方案一:
第一步:下载文库核心插件
(FlexPaper+SWFTools 实现仿百度文库pdf->swf->界面显示);
下载地址:http://down.51cto.com/data/564004(PHP仿百度文库核心代码)
SWFTools官方下载地址:
http://www.swftools.org/download.html
1、界面显示.swf
2、pdf转换成.swf配置
flexpaper\php\lib\config.ini.win.php
path.pdf和path.swf分别建一个pdf存放路径和转换后.swf存放路径(即前台读取路径)
安装好SWFTools,并配置好SWFTools安装完整路径,别填错了。
2、pdf->swf转换页面地址:(打开页面,自己会转换成.swf并页面显示)
flexpaper/php/simple_document.php
第二步:解决上传文件转换为PDF问题
PHP目前没有开源的文件转换为PDF的代码插件。
OpenOffice是一套跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系统上执行。它与各个主要的办公室软件套件兼容。OpenOffice 是自由软件,任何人都可以免费下载、使用、及推广它。
并且OpenOffice还提供了开源的Java调用API。(很遗憾没有PHP的调用API),所以下一步要做的工作就是实现PHP能调用java类,从而实现php调用OpenOffice来转换上传文件到pdf。
OpenOffice官网下载地址:(因为调用它,当然服务器上也必须装上这个软件,而且要保持打开运行的状态)
http://www.openoffice.org/download/
本地下载:http://down.51cto.com/data/583479
OpenOffice API下载地址:
官网:http://www.openoffice.org/api/
第三步:测试php调用java类
1、配置
下载:JavaBridge.jar http://down.51cto.com/data/560547
下载:java.inc http://down.51cto.com/data/564342
将JavaBridge.jar放在C:\Program Files\PHP\ext中 然后双击打开:
然后,将java.inc取名就叫java文件夹放在htdoc根目录中,然后建一个测试文件:
运行test.php但是报错:
- <?php
- require_once ( "java/Java.inc" );
- $v = new java("java.lang.System");
- $arr=$v->getProperties();
- foreach ($arr as $key => $value){
- echo $key.'=>'.$value.'<br />';
- }
- echo '<hr />';
- require_once("java/Java.inc"); //必须包含的配置文件
- java_require("Test.jar"); //引用包含的jar包
- $test = new Java("com.phpjava.Test"); //产生实例
- $test->setName("哈哈,PHP调用JAVA的方法!"); //后面的调用就跟在php中调用类方法一样
- echo "调用类Test的getName方法,返回值为:".$test->getName()."<br>";
- echo "调用Test的add方法,返回值为:".$test->add(11.2, 15.7);
- ?>
总是提示java_require()不被支持。期待高手指教!
结果路就被堵在了此处。最终此方案放弃。如果能够顺利php调用java方法,那么这个方案还是可行的。
==========================The End=================================================
方案二:
FlexPaper是一个开源的PDF文档在线查看控件。用户查看PDF文档不需要安装Acrobat Reader,但需要利用像SwfTools这样的工具预先将PDF文档转成SWF格式的文件。FlexPaper能够对需要查看的文档进行分页、搜索、打印、缩放、全屏查看等
但对于一次性加载整个大型文档会导致加载时间过长和内存过渡消耗。 在新的FlexPaper版本中已经能够解决这个问题。首先需要将你的文档拆分成多份swf文件,然后在调用FlexPaper的时候设置好相关参数,这 样在浏览的时候就能够分页/分段加载。下面将介绍如何将文档拆分成多份swf文件和怎么设置FlexPaper参数:
关于如何拆分文档,在FlexPaper 1.4.5中已经提供了一个开箱即用的示例。只要在支持PHP的服务器上运行其提供的'split_document.php'文件能够自动进行分页。对 于服务器上不支持PHP运行的,可以在调用PDF2SWF程序时,在原来调用的命令行基础上稍微修改一下具体如下:
C:\SWFTools\pdf2swf.exe Paper.pdf -o Paper%.swf -f -T 9 -t -s storeallcharacters
大家可以看到上面的命令行比原来只多了一个%符号,这个符号表示在PDF2SWF转换文档时,将为每一个页创建一个swf文件。如:"Paper1.swf", "Paper2.swf"。然后在FlexPaper控件配置加载SwfFile的地方,采用:{filename[*,padding],total pages}这种语法表明。
以下给出一个具体的配置示例:
- var fp = new FlexPaperViewer(
- 'FlexPaperViewer',
- 'viewerPlaceHolder', { config : {
- SwfFile : "{Paper[*,0].swf,28}",
- Scale : 0.6,
- ZoomTime : 0.5,
- ZoomInterval : 0.1,
- FitPageOnLoad : false,
- FitWidthOnLoad : false,
- PrintEnabled : false,
- MinZoomSize : 0.2,
- MaxZoomSize : 5,
- localeChain : "en_US"
- }});
在这个例子中,我们指示FlexPaper按分页的方法来加载一个共有28页的文档,不需要用0填充文件名。假如你的文件是 按"Paper01.swf", "Paper02.swf", .. 这种形式拆分时,要将padding设置成1,意思是用一个零来填充文件名。
但是这种解决方法有点不足的地方就是拆分后的一个个swf文件大小加起来比较原来单个文档的大小多了很多。
本文出自 “PHPer许琴-专注于PHP技术” 博客,转载请与作者联系!