仿百度文库

标签存档: flexpaper

仿百度文库方案,openoffice.org 3+swftools+flexpaper

 

FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用,

使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用。

另外你也可以通过将一些例如Word、PPT等文档转成PDF,然后实现在线浏览。

FlexPaper_1.2.4_flash:无打印功能

FlexPaper_1.4.7_flash:打印功能,右键打印

这里我们不需要让用户打印,所以笔者选择FlexPaper_1.2.4_flash。

FlexPaper项目中有演示demo,这里笔者不多述。

综上,一个完整的在线文档浏览方案。

51.la 专业、免费、强健的访问统计

文档生成技术细节 提取文字图片

文档在线预览研究系列
总体思路
文档生成技术细节
利用百度阅读器

  之前的“ 文档在线预览:总体思路”受到很多朋友的欢迎,为此我继续讲一下文档在线预览两个步骤的一些技术细节。以下我以C#语言和Windows平台为例展开做一些介绍。
  请记住,本文讲的是文档转化为pdf再转化为其他格式的方法,不讨论转化成的flash如何展示的问题(暂且假设用FlexPaper来展示吧)。文章后面附带本文讲到的相关操作的源码和软件下载,有些软件需要购买授权才能使用。
四项基本操作
1、调用Windows打印机打印文档
1 </pre>
2 <div>            PrintDocument docToPrint = new PrintDocument();
3             docToPrint.DocumentName = GetPath(sourcePath);
4             //开始打印
5             docToPrint.Print();
 
 
 
 
2、调用命令行执行CMD命令
 

 

 
1 /// <summary>
2         /// 运行命令
3         /// </summary>
4         /// <param name="strShellCommand">命令字符串</param>
5         /// <returns>命令运行时间</returns>
6         private static double RunShell(string strShellCommand)
7         {
8             double spanMilliseconds = 0;
9             DateTime beginTime = DateTime.Now;
10  
11             Process cmd = new Process();
12             cmd.StartInfo.FileName = "cmd.exe";
13             cmd.StartInfo.UseShellExecute = false;
14             cmd.StartInfo.CreateNoWindow = true;
15             cmd.StartInfo.Arguments = String.Format(@"/c {0}", strShellCommand);
16             cmd.Start();
17             cmd.WaitForExit();
18  
19             DateTime endTime = DateTime.Now;
20             TimeSpan timeSpan = endTime - beginTime;
21             spanMilliseconds = timeSpan.TotalMilliseconds;
22  
23             return spanMilliseconds;

3、检查文件是否生成完毕

 

1 <strong></strong>
2  
3 <strong>/// <summary>
4         /// 检查是否转换成功(文件是否生成完毕)
5         /// </summary>
6         /// <param name="sourcePath">要检查文件地址</param>
7         /// <param name="targetPath">要复制到的地址(如果不需要真正复制,请跟sourcePath一致)</param>
8         /// <param name="timeout">最大等待时间</param>
9         /// <returns></returns>
10         private static bool IsParseSuccess(string sourcePath, string targetPath, int timeout)
11         {
12             bool isSuccess = false;
13  
14             if (timeout <= 0)
15                 timeout = 30;
16  
17             int i = 0;
18             while (!RenameFile(sourcePath, targetPath))
19             {
20                 Thread.Sleep(1000);
21                 i++;
22                 if (i == timeout)
23                     break;
24             }
25             if (i < timeout)
26                 isSuccess = true;
27  
28             return isSuccess;
29         }
30  
31         /// <summary>
32         /// 重命名文件(用来检查文件是否生成完成)
33         /// </summary>
34         /// <param name="sourePath">源地址</param>
35         /// <param name="targetPath">目标地址</param>
36         /// <returns></returns>
37         private static bool RenameFile(string sourePath, string targetPath)
38         {
39             bool isOpen = false;
40              
41             //如果是相同地址,直接移动检查是否文件已经生成,否则进行复制(因为目标文件存在的话会有问题)
42             if (sourePath.Equals(targetPath))
43             {
44                 try
45                 {
46                     //移动文件
47                     File.Move(sourePath, targetPath);
48                     isOpen = true;
49                 }
50                 catch (Exception e)
51                 {
52  
53                 }
54             }
55             else
56             {
57                 bool isCopySuccess = false;
58                 try
59                 {
60                     //复制文件
61                     File.Copy(sourePath, targetPath, true);
62                     isCopySuccess = true;
63                 }
64                 catch (Exception e)
65                 {
66                     isCopySuccess = false;
67                 }
68                 if (isCopySuccess)
69                 {
70                     //如果复制成功,删除源文件
71                     File.Delete(sourePath);
72                 }
73             }
74  
75             return isOpen;
76         }</strong>

 

4、杀掉进行函数

1 <strong> /// <summary>
2         /// 根据进程名称来关闭进程
3         /// </summary>
4         /// <param name="processName"></param>
5         private static void KillPrecess(string processName)
6         {
7             foreach (Process p in Process.GetProcesses())
8             {
9                 if (p.ProcessName == processName)
10                 {
11                     p.Kill();
12                 }
13             
14         }</strong>

文档转pdf
  我们介绍的文档转化为pdf的方法,要求是较为通用,即不需要根据具体文档写具体的程序,且不仅要支持Office文档,最好还要支持txt、html等其他文档。
1、使用pdfFactory(见源码方法:ParsePDFWithPdfFactory)
说明:软件需要注册才能使用
原理:
  a. 调用系统默认打印机(pdfFactory)打印文档;
  b. 从打印机的临时目录里将pdf拷贝到目标路径;
pdfFactory的设置:
  a. 打开打印机,设置“pdfFactory Pro”为默认打印机;
  b. 打开“pdfFactory Pro”的“打印机首选项”,在“Licensing”选项卡里注册打印机;
  c. 打开“pdfFactory Pro”的“打印机首选项”,结合程序,进行如下两个图的设置;

 

优点:
  a. 只要支持打印的文件均可以用此法转化为pdf;
不足:
  a. 服务器上经常会弹出文件打印窗口;
  b. 一些损坏的文件或者格式不正确的文档会中止生成过程;
  c. 如果遇到带病毒宏的文档,会对服务器产生破坏;
注意事项:
  a. 打印过程中会产生大量临时文件在用户目录,需要及时清理垃圾文件,或者将对应目录迁移到磁盘空间较大的位置;
  b. Windows Server需要安装Server版pdfFactory;
2、使用FlashPaper(见源码方法:ParsePDFWithFlashPrinter)
原理:调用命令行“flashprinter c:\document.doc -o c:\document.pdf”进行打印;
优点:
  a. 只要支持打印的文件均可以用此法转化为pdf;
  b. 操作简单
不足:
  a. 由于程序本身问题,有时可能导致打印不能结束,几百个进程同时运行拖垮系统的情况;
3、其他方法(未附源码)
  使用其他虚拟打印机,例如:Virtual PDF Printer
  使用jcom或其它方式调用Office的Component进行转化,具体请参考: 将office文档(word,excel,powerpoint)转换为pdf
  调用使用JodConverter调用OpenOffice转化,具体请参考: JodConverter实现Office转化PDF格式
pdf转flash(见源码方法:ParseSWF)
原理:使用SWFTools的pdf2swf,调用命令行“pdf2swf.exe -T 9 -p 1-3 -s languagedir=D:\xpdf-3.02pl5\xpdf-chinese-simplified D:\document.pdf -o D:\document.swf”进行转换;
常见问题:
1、部分文档转化后乱码,控制台提示:找不到“Adobe-GB1”字体
解决办法:在pdf2swf命令中带上语言包,详情请看: http://cqfish.blog.51cto.com/622299/163566
2、部分文档可能无法在FlexPaper里无法显示
解决办法:flash版本的问题,在pdf2swf命令中带上参数,设置生成的版本为9(参数为:-T 9),这样兼容性最好。
pdf转图片(见源码方法:ParseCoverImage)
原理:使用“VeryPDF PDF To Image Converter”软件,调用命令行“pdf2img.exe -r 25 -f 1 -l 1 -i c:\1.pdf -o c:\11.jpg ”进行转换;
pdf转文本(见源码方法:ParseText)
有时为了生成摘要或者索引文档内容,需要将文档里的文本读取进来, xpdf是一个不错的工具。
原理:使用“ xpdf”软件,调用命令行“pdftotext.exe c:\1.pdf c:\1.txt”进行转化;
常见问题:要让xpdf支持中文,还需要下载中文语言包并做一些配置,xpdf中文化详细配置请参考: http://emily2ly.javaeye.com/blog/743552
本文涉及软件及源码下载: document-preview-online-demo-canbeing.rar
 

 

 

 

51.la 专业、免费、强健的访问统计

1.首先下exPaper的源码。下载地址载Fl

2.本人不懂flash,只是百度下,然后自己瞎弄弄的。我用的flash build 4.5

首先在flash build中新建一个flex项目,第一步填写项目名称-flexpaper,第二步直接默认,最后一步需要注意下。

选择合并到代码中,要不然你的bin-debug目录下面会出现很多其他的swf文件

然后把你1步下载下来的源码解压。

把这三个目录全部复制到你刚才建立的flex项目根目录下。最后结果是这样的:

这时候打开src目录下面默认包下的flexpaper.mxml文件,加入如下代码,里面paper.swf是从pdf转换过来的,不懂的就看看我说flexpaper的文章。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"   
                layout="absolute" 
                width="100%" height="100%" 
                xmlns:flexpaper="com.devaldi.controls.flexpaper.*"> 
    
    
    
    <!--Scale为浏览文档的放大比率--> 
    <flexpaper:FlexPaperViewer width="100%" height="100%"   
                               Scale="1.0" SwfFile="Paper.swf" /> 
    
</mx:Application>

然后点击项目的属性,将附加的编译参数修改成如下所示,-source-path=locale/{locale}

 

我记得这些全部完成以后,好像有个文件一处会有错误,如果出错文件前面会有个红×,找到它,然后把那句话去掉,就是一个属性设置。没什么影响。

然后就可以run了。

修改:

1.右上角有一个FP,点击以后出现about

找到如下所示的文件:


打开,搜索bttnInfo,一共就三句,全部注释掉。然后在run,就会发现右上角的FP没了。(print也是在这个文件里面修改的,大家自己看看吧)

2.修改右下角的logo,如下

找到如下文件,打开,找到sizeChanged这个函数。把里面的两句话都注释掉就OK了。(虽然不懂,但是这些看看也都能知道个大概)

好了。修改完毕。至于其他的修改,大家可以自己看看源文件。反正功能老外都帮我们现实了,我们只要修修改改而已。

补充一点,如果想用,入下图:

找到项目bin-debug下面的flexpaper.swf。(其他的swf就是我之前没有合并到代码中的那些swf,如果没有合并的需要把这些swf文件全部一起拷贝)

放在你下载回来的例子中,替换如下:

把刚才的文件改成这个名字就OK了。然后在运行就会发现可以了。

这么改完的flexpaperview.swf 无法加载数据库的路径swf了,是因为写死 paper.swf了吧,怎么处理?
 
@shanjisk
上面有一步是flash设置合并到代码中。那就不要设置就可以了。
他就会出现其他的swf文件 你全部拷贝去项目目录吧。
 
51.la 专业、免费、强健的访问统计

flexpaper flash右上角的圆圈一直在转解决PHP调用

工作中需要用到在线pdf阅读器,所以百度了下,找到了flexpaper这个工具。

1.下载工具 google code

2.还需要一个工具SWFTool,这是一个将pdf转换成swf的工具 下载地址,下载以后安装。

解压1中的压缩包,运行index.html.如果发现flash右上角的圆圈一直在转。

怎前往http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html#119065这个网站添加信任。

如下图所示:

然后在运行,你会发现成功了。

这个例子运行都是很简单的,现在来说说怎么结合php使用。SWFTool,也就是2步装的软件这时候就需要用上了。

1 <pre>$cmd = '"C:\Program Files\SWFTools\pdf2swf.exe" -t F:\\demo.pdf -s flashversion=9 -o F:\\tcpip.swf';//这是SWFTool命令行参数
2 $cmdline = "ping www.baidu.com";
3 echo system($cmd);</pre>

在相应的F盘下放置demo.pdf。运行上述php脚本就会发现F盘下多出一个tcpip.swf的flash文件。这时候把这个flash文件放置在1中解压的根目录下面,替换index.html22行

中的swf文件名。即可看到加载了你自己的pdf。其他的逻辑步骤你自己相应编写。

我用到这里突然发现1中解压的文件中有个php目录。运行里面的事例,突然发现原来例子都帮你写好一定的逻辑处理了。

右侧出现的single意思是将pdf转换成单一的swf文件。不过有时候pdf文件过大,不可能一次转换。这时候就需要用到下面的命令进行转换了。

其他没什么说的,大家运行下自己看看效果就知道了。

有点说下,split_document.php文件中的102行

οnclick="document.location='split_document.php?doc='+$('#txt_doc').val()+'&t='+Math.random()"

这里最好加个随机数。要不然有时候浏览器的缓存让你看不出加载的效果。

你想做什么程序,照着这个demo改改基本上在线pdf那块就ok了。

来源:http://www.cnblogs.com/yimiao/archive/2011/12/31/2308754.html

51.la 专业、免费、强健的访问统计

FlexPaper+SwfTools实现的在线文档功能

最近一个项目需要实现一个在线浏览文档的功能。准备使用FlexPaper配合Pdf2Swf实现。

主要需求在于:

    ➔ 文档页数很多,少则几百页,多则上千页。
    ➔ 相应的文档大小也在50MB以上。

根据需求,将该功能拆分成了三部分:

    ➔ 上传:支持大文件,断点续传。
    ➔ 文件转换服务:在后台进行Pdf转Swf。
    ➔ 在线浏览:分页加载。

其中文件上传部分是我同事实现的,这里主要讲下后台服务和在线浏览部分。

文件转换服务

大体思路是:
    后台服务定时扫描文件夹PdfPath,如果发现Pdf文件,则调用Pdf2Swf.exe,将PDF逐页转换成Swf文件,存入SwfPath中的与文件名称对应的文件夹里。

    这里使用了SwfTools套件中的Pdf2Swf工具:下载

主要代码:

1 </pre>
2 &nbsp;
3  
4 //PDF转换成SWF
5 private void ConvertPDFtoSWF(string pdfFile)
6 {
7     using (Process p = new Process())
8     {
9         SystemLog.CurrentLogger.Debug(string.Format("正在处理 {0} ...", pdfFile));
10  
11         string pdf2swfExe = "pdf2swf.exe";
12         string savePath = GetSavePathFromName(pdfFile);
13  
14         string cmd = pdf2swfExe;
15         string args = "  -t \"" + pdfFile + "\"  -o \"" + savePath + pdfFile.Split('\\').Last().Replace(".pdf", "")
16             + "%.swf\" -s drawonlyshapes -s flashversion=9";
17  
18         p.StartInfo.FileName = cmd;
19         p.StartInfo.Arguments = args;
20         p.StartInfo.UseShellExecute = false;
21  
22         //此类提供的标准output流只有2k,不要重定向
23         p.StartInfo.RedirectStandardOutput = false;
24  
25         p.StartInfo.CreateNoWindow = true;
26         p.Start();
27         p.PriorityClass = ProcessPriorityClass.High;
28         p.WaitForExit();
29  
30         SystemLog.CurrentLogger.Debug(string.Format("{0} 处理完成。", pdfFile));
31  
32         if (AppConfiguration.DeleteConvertedPdf)
33         {
34             //转换完成后删除Pdf
35             File.Delete(pdfFile);
36             SystemLog.CurrentLogger.Debug(string.Format("{0} 已删除。", pdfFile));
37         }
38         else
39         {
40             //重命名Pdf
41             File.Move(pdfFile, pdfFile + ".bak");
42             SystemLog.CurrentLogger.Debug(string.Format("{0} 已重命名。", pdfFile));
43         }
44     }
45 }

 

 写服务的时候遇到一个奇怪的Bug,发布为服务的时候,测试用的Pdf文件每次转换到37页的时候就卡住了,但是用命令行进行调试的时候却一切OK。
    Google后发现,原来是Process的output流问题:output流只有2KB,而Pdf2Swf会产生大量输出,2KB很快就耗尽了。

之前在测试的时候,发现转换过程中会出现文字丢失的现象。这里使用了-s drawonlyshapes 这个参数,将Pdf全部作为图片转换的。这样虽然保证了兼容性,但是牺牲了空间。作为图片生成的Swf比文本格式的Swf要大不少,不知道大家有没有什么好的解决方法。

在线浏览

    FlexPaper支持分页加载,采用{filename[*,padding],total pages}这种语法即可。

主要代码:

1 <a id="viewerPlaceHolder" style="width: 800px; height: 600px; display: block"></a>
2  
3 <script type="text/javascript">
4     var fp = new FlexPaperViewer(
5     'FlexPaperViewer',
6      'viewerPlaceHolder', { config: {
7          SwfFile: 'SwfFolder/<%=Folder %>/{<%=Folder %>[*,0].swf,<%=PageNum %>}',
8          localeChain: "zh_CN", //中文
9          Scale: 1,
10          ZoomTransition: 'easeOut',
11          ZoomTime: 0.5,
12          ZoomInterval: 0.2,
13          FitPageOnLoad: false,
14          FitWidthOnLoad: false,
15          PrintEnabled: true,
16          FullScreenAsMaxWindow: false,
17          ProgressiveLoading: false,
18          MinZoomSize: 0.2,
19          MaxZoomSize: 5,
20          SearchMatchAll: false,
21          InitViewMode: 'Portrait',
22  
23          ViewModeToolsVisible: true,
24          ZoomToolsVisible: true,
25          NavToolsVisible: true,
26          CursorToolsVisible: true,
27          SearchToolsVisible: true
28      }
29      });
30 </script>

 

FlexPaper无法载入中文文件名。如果右上角的圈圈一直在转,注意是不是文件名称的问题。  

参考文章

c# System.Diagnostics.Process 调用外部程序时WaitForExit锁死问题分析及解决方案

FlexPaper+SWFTools 实现仿百度文库及一些小问题

Pdf2Swf命令行参数

解决FlexPaper分页分段加载问题

源码

分页加载:FlexPaper.zip

文件转换服务:PDFtoSWFService.zip

来源:http://www.cnblogs.com/penbox/archive/2011/09/02/2163646.html

51.la 专业、免费、强健的访问统计

Flex Paper 源码编译

FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用。

 

实现如豆丁和百度文库一样的效果,可以先将文件转为swf,再使用flex paper来进行在线浏览。

 

Flex Paper播放器及组件下载地址:

http://code.google.com/p/flexpaper/downloads/list

它的使用很简单,可以看我前面的转载的Flex:使用FlexPaper显示PDF文档。
源码下载 需要使用svn 地址:

http://flexpaper.googlecode.com/svn/trunk/

 

下面主要讲一下对源码的重新编译:

(转出错的提示及解决http://bbs.9ria.com/viewthread.php?tid=24002)

 

我的 flex builder 的版本是3.0.2.  为什么在使用时,无法定义vector对象,提示说是找不到类型,代码提示中也找不到提示. vector是顶级包的类型.请教高手,这是什么问题呢?怎么解决?

右键你创建的工程,选择properties选择Flex Compiler 将你的FlashPlayer的版本改为10再试试。我试过是可以成功的。

 

还有一个错误见文章最后面。

 

我使用flex builder 4导入flexpaper源码后有出错提示,在problems里有如下提示:

Description Resource Path Location Type unable to open ‘C:\Program Files\Adobe\Adobe Flash Builder 4\sdks\4.0.0\frameworks\locale\hu_HU’ FlexPaper Unknown Flex Problem

我拷入这个下载下来的flexPaper时,将它的.actionScriptProperties文件里的支持的言语包去掉只剩下:

 additionalCompilerArguments=”-locale=en_US  -allow-source-path-overlap=true”

并在true后加入 -source-path=locale/{locale}

还是出错,我就没办法,不知道有没有做过这方面的朋友愿意告诉一下我怎样将flex paper源码导入flex builder而不会出错。

 

我在无奈之下,就自己新建了一个flex project,将flex paper的src下的东西全拷过来放在src下,将locale和assets拷入到根目录下,这时出现如下错误:

Description Resource Path Location Type
Unable to resolve resource bundle “FlexPaper” for locale “en_US”. ww  Unknown Flex Problem
Unable to resolve resource bundle “FlexPaper” for locale “en_US”. ww  Unknown Flex Problem
Unable to resolve resource bundle “FlexPaper” for locale “en_US”. ww  Unknown Flex Problem

网上有人说可以在Propertities–>Flex Compiler的Addition compiler arguments里加入 -source-path=locale/{locale}可以解决,我试过是可以的.

 

自己新建一个mxml文件,输入如下内容:

<?xml version=”1.0″ encoding=”utf-8″?> <mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” width=”100%” height=”100%” xmlns:flexpaper=”com.devaldi.controls.flexpaper.*”> <!–Scale为浏览文档的放大比率–> <flexpaper:FlexPaperViewer width=”100%” height=”100%” Scale=”1.0″ SwfFile=”a.swf” /> </mx:Application>

 

便可直接flex paper的运行显示,然后就作自己的改造处理。

 

修改好之后,如何打成swc包呢?

(转swc文件的内容:

swc文件是flex的压缩包文件,就像是java的jar文件一样,所以如果将.swc后缀名修改成.zip,然后可以用winrar打开,里面就存有相应的内容,flash提供了这个工具,pkzip可以直接打开这个文件。
其中文件列表包括如下内容:
catalog.xml,文件描述,其中列举了组件的内容 )

 

如何在flex builder中打包swc文件:

1.新建actionscript library project
2.将需要的源文件导入到SRC目录下。
3.在项目的配置的flex library build path中,将src前面打勾。
4.OK。刷新一下就可以在bin目录下看到SWC文件了

 

我这里改造好的flexpaper的src全部覆盖actionscript library project的src目录,并将locale和assets目录拷到这个项目的根目录下,再到propertities里的Flex Library Compiler里的Additional compiler arguments加入-source-path=locale/{locale}不然它找不到语言包。这样完了之后,刷新一下项目,它就自动打包好到这个项目下的bin里的啦,并具它会将引用到的flex的sdk的包也打进去,在bin下的swc文件,你可以直接放到其它工程里去作为引用包使用,就是提供API供外面project调用。

 

 

最后附:

Flexviewer中创建自己的Flex中文语言包

http://fishincd.blog.sohu.com/130076793.html

 

 

 

Flex: Unable To Open locale en_US or fr_FR

 

If you want to create a localized application you may find yourself in a strange situation when you did all the steps like in the book, but you continue to receive the “Unable to open locale xx_XX” error messages.

To simulate a fix on this issue we will take the example of adding French to your app.

Basic steps:
– The first step is to create a fr_FR folder under the /locale/ one exactly like in the Flex documentation and then add the translated bundle.properties file.
– The second step is to add the compiler options: -locale en_US,fr_FR

 

Extra steps you need to make in order to get rid of the ugly “unable to open locale” error message:

1. goto the following path :

<flex-install-folder>/sdks/<current-sdk-folder>/bin/

for windows it’s: C:\Program Files\Adobe\Flex Builder 3\sdks\3.2.0\bin\

2. Execute the following command:

> copylocale.exe en_US fr_FR

That’s all, hope we helped you!
————————-

The TiMeister Team

再转载(http://stackoverflow.com/questions/1028644/flex-unable-to-open-locale-en-us):

 

Flex : Unable to open ‘locale/en_US’

 

Using Flex Builder :
I have created a new Actionscript Project. I want to use mx.controls.Button class in it, so I did the following :

  1. Added ‘-locale=en_US -source-path=locale/{locale}’ to the Actionscript compiler arguments
  2. Added ‘framework.swc’ to the library path

But now I get this error: unable to open ‘locale/en_US’ I looked up and I do have the following directory inside my Flex Builder 3 installation: 
./sdks/3.0.0/frameworks/locale/en_US

How to fix it?

 

Have you added a “locale” directory containing an “en_US” directory at the root of your Flex project, to be used for storing your locale-specific properties? For example, in a project supporting English- and French-localized strings, your Flex project structure might look something like this:

— YourProject    |– libs    |– locale        |– en_US            |– resources.properties        |– en_FR            |– resources.properties    |– src        |– [Your source files...]

Sounds like that might be what’s happening. Give it a try and post back if it doesn’t work for ya.

来源:http://www.建网站.com/Web前端/1-4610475.html

 

51.la 专业、免费、强健的访问统计

解决FlexPaper分页分段异步加载问题

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}这种语法表明。

以下给出一个具体的配置示例:

1         var fp = new FlexPaperViewer(   
2         'FlexPaperViewer',
3         'viewerPlaceHolder', { config : {
4                   SwfFile : "{Paper[*,0].swf,28}",
5                   Scale : 0.6,
6                   ZoomTime : 0.5,
7                   ZoomInterval : 0.1,
8                   FitPageOnLoad : false,
9                   FitWidthOnLoad : false,
10                   PrintEnabled : false,
11                   MinZoomSize : 0.2,
12                   MaxZoomSize : 5,
13                   localeChain : "en_US"
14         }});

在这个例子中,我们指示FlexPaper按分页的方法来加载一个共有28页的文档,不需要用0填充文件名。假如你的文件是按”Paper01.swf”, “Paper02.swf”, .. 这种形式拆分时,要将padding设置成1,意思是用一个零来填充文件名。

但是这种解决方法有点不足的地方就是拆分后的一个个swf文件大小加起来比较原来单个文档的大小多了很多。

下载:1.4.5 Flash Version (release notes)
 

 
51.la 专业、免费、强健的访问统计

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

1.概述

 
    FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用, 使在浏览器中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。
      另外也可以通过将一些例如Word、PPT等文档转成PDF,然后实现在线浏览。
 

2.    实现步骤

    文档(PDF,Word,PPT等) —-> 转换为SWF   —–> 使用FlexPa在线浏览
 

2.1.转换SWF

需要使用一个工具,SwfTools,目前最新版本是0.9.1;
下载地址  
 可以使用命令行将文件转换为swf文件; 
      例如将Paper3.pdf转换成Paper3.swf的命令为:
       C:\SWFTools\pdf2swf.exe Paper3.pdf -o Paper3.swf  
        与之对应的程序实现方法:(C#)

Process pc = new Process();
ProcessStartInfo psi = new ProcessStartInfo(“C:\\SWFTools\\pdf2swf.exe”, “Paper3.pdf  Paper3.swf”);
pc.StartInfo = psi;
pc.Start();
pc.WaitForExit();

 
       更多关于SwfTools命令的说明可点这里下载说明文档。
 

2.2.   浏览器中浏览

 首先要下载Flexpaper,目前最新版本为1.4.0 ;
        下载地址 
        下载后解压到网页目录中。
  在页面中使用以下代码即可实现Swf文档的浏览。

var params = {
SwfFile : “Paper.swf”,
Scale : 0.6
}
swfobject.embedSWF(“FlexPaperViewer.swf”,”cb”,”500″,”500″,”9.0.0″,”js/swfobject/expressInstall.swf”, params)

 
 
SwfFile参数是你想显示的文件,Scale是0-1之间的数,表示显示的放大参数。
 说的再好听,不如看源码来得直接。源码在这里下。
 
下面才是本文 的重点(网上找不到的 *_*,找到也没有这详细;嘻嘻)

3.    参数列表

 官方网站有,但是没有我的全。 去官网
 

参数名称 参数值及说明
CursorToolsVisible (True/False)
FitPageOnLoad (True/False)
FitWidthOnLoad (True/False)
FullScreenAsMaxWindow (True/False)
FullScreenVisible (True/False)
NavToolsVisible (True/False)
PrintEnabled (True/False)
PrintToolsVisible (True/False)
ProgressiveLoading (True/False)
Scale  
SearchToolsVisible (True/False)
StartAtPage  
SwfFile  
ViewModeToolsVisible (True/False)
ZoomInterval  
ZoomTime  
ZoomToolsVisible (True/False)
ZoomTransition  

4.    事件与函数

 这个不多,还是列下吧,不过要详细的请到官网去看吧。去官网
 

函数名称 函数说明
gotoPage (Number pageNumber) 跳转到指定页
fitWidth() 设置为宽度模式视图
fitHeight() 设置为高度模式视图
loadSwf (String swffile) 加载一个新的swf文件到浏览器中
getCurrPage() 获取当前页码
nextPage() 跳转到下一页
prevPage () 跳转到上一页
Zoom (Number factor) 按系数缩放
searchText (String text) 搜索文字
switchMode (String mode)  变换视图模式;参数值可为(“Portrait”, “Two Page”, “Tile”)
printPaper () 打印加载的文档

 
 

事件名称 事件说明
onDocumentLoaded () 文档加载完成后触发
onDocumentLoadedError (String errorMessage) 加载文档出错时候触发
onProgress (Number bytesloaded, Number bytestotal) 文档正在加载的时候触发
onCurrentPageChanged (Number pagenumber) 页面改变时触发
onExternalLinkClicked (String link) 当用户点击外部链接的时候触发

 

来源下载:http://www.21nave.com/bencandy.php?fid=40&id=1467

51.la 专业、免费、强健的访问统计

linux下用flexpaper做像百度文库和豆丁网一样的在线文档浏览

以下安装步骤在debian5上测试通过
安装JRE
http://blog.linuxphp.org/archives/572/
安装基本包

apt-get install openoffice.org-core openoffice.org-java-common xvfb openoffice.org-writer openoffice.org-calc
apt-get install openoffice.org-l10n-zh-cn openoffice.org-l10n-zh-tw python-uno openoffice.org-draw openoffice.org-impress

配置虚拟桌面

Xvfb :1 -screen 0 800x600x24&
export DISPLAY=localhost:1

运行soffice服务

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

文档转为Pdf(支持多种格式)

unoconv -f pdf mrtg.doc

pdf转为swf

pdf2swf -t mrtg.pdf -o mrtg.swf -s flashversion=9

flexpaper播放

wget http://flexpaper.googlecode.com/files/FlexPaper_1.4.5_flash.zip

解压缩后有个index.html是示例,用到的文件是

flexpaper/js/flexpaper_flash.js
flexpaper/FlexPaperViewer.swf

SwfFile参数指定要播放的swf文件路径
问题1
javaldx: Could not find a Java Runtime Environment
如已经配置好JRE还是报错

apt-get install openoffice.org-java-common

问题2
soffice.bin X11 error: Can’t open display

apt-get install xvfb
Xvfb :1 -screen 0 800x600x24&
export DISPLAY=localhost:1

问题3
unoconv: UnoException during conversion: URL seems to be an unsupported one.

apt-get install openoffice.org-writer openoffice.org-draw openoffice.org-impress  python-uno

如果还有问题可能是soffice启动不对,重启下试试
问题4
如果中文乱码

apt-get install openoffice.org-l10n-zh-cn openoffice.org-l10n-zh-tw

仍然不能解决问题,杀死soffice进程,重新启动试试

问题5
unoconv: File could not be loaded by OpenOffice

windows txt文件换行符问题,用程序把"\r\n"替换为"\n"

问题6
Unable to connect or start own listener. Aborting.
使用正确的方法启动soffice如果是soffice -accept=”socket,port=8100;urp;”改为

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

参考

http://www.oschina.net/p/flexpaper

http://hi.baidu.com/lurim/blog/item/7d21f13ea39f22e554e723d8.html

http://rainx.cn/blog/archives/140

http://blog.sina.com.cn/s/blog_502c8cc40100n6zz.html

http://rongjih.blog.163.com/blog/static/33574461201161172331383/

http://www.linux-wiki.cn/index.php/%E6%96%87%E6%A1%A3%E6%A0%BC%E5%BC%8F%E6%89%B9%E9%87%8F%E8%BD%AC%E6%8D%A2(doc,txt,pdf%E7%AD%89)

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=491456

ASP.NET使用flexpaper做在线文档浏览

 

最近有个项目需要用到类似百度文库以及豆丁的在线浏览组件,网上转悠半天就找到了个flexpaper,需要从这里下载http://code.google.com/p/flexpaper/downloads/list 。flexpaper 支持的文档类型为swf格式。于是乎,就想着把pdf文件转换成swf,因为装了adobe reader软件的电脑ms word之类的文档可以直接保存为pdf格式。网上都说pdf2swf这个工具不错,需要从这里下载http://www.swftools.org/download.html 。只需要用命令行操作即可,小试一下果然牛的不得了啊。

把PDF转换成SWF需要用命令行操作pdf2swf.exe,代码如下

        public static void ExecuteCmd(string cmd,string args)

        {

            using (Process p = new Process())

            {

                p.StartInfo.FileName = cmd;

                p.StartInfo.Arguments = args;

                p.StartInfo.UseShellExecute = false;

                p.StartInfo.RedirectStandardOutput = false;

                p.StartInfo.CreateNoWindow = true;

                p.Start();

                p.PriorityClass = ProcessPriorityClass.Normal;

                p.WaitForExit();

            }

        }

调用代码如下,给pdf2swf.exe所传的参数简单说描述下,-t后面跟的就是目标文件路径,-o是输出文件的具体路径,

            string cmdStr = HttpContext.Current.Server.MapPath(“FlexPaper/pdf2swf.exe”);

            string savePath = HttpContext.Current.Server.MapPath(“Test”);

            string filePath = HttpContext.Current.Server.MapPath(“PDF/Amazon隐藏的帝国.pdf”);

            string args = ”  -t ” + filePath + ”  -o ” + savePath + “\\Amazon隐藏的帝国.swf”;

            //分页

 

            //string args = ”  -t ” + filePath + ”  -o ” + savePath + “\\Amazon隐藏的帝国%.swf -f -T 9 -t -s storeallcharacters”;

 

            PDF2SWFCmd.ExecuteCmd(cmdStr, args);

前台展示文档页面代码如下,都是从官网demo直接粘贴的,呵呵

    <script language=”javascript” type=”text/javascript” src=”FlexPaper/js/jquery.js”></script>

    <script language=”javascript” type=”text/javascript” src=”FlexPaper/js/flexpaper_flash_debug.js”></script>

    <div style=”position:absolute;left:10px;top:10px;”>

                 <a id=”viewerPlaceHolder” style=”width:660px;height:480px;display:block”></a>

                 <script type=”text/javascript”>

                     var fp = new FlexPaperViewer(

                                                         ‘FlexPaper/FlexPaperViewer’,

                                                         ‘viewerPlaceHolder’, { config: {

                                                             SwfFile: ‘Test/Amazon隐藏的帝国.swf’,

                                                             Scale: 0.6,

                                                             ZoomTransition: ‘easeOut’,

                                                             ZoomTime: 0.5,

                                                             ZoomInterval: 0.2,

                                                             FitPageOnLoad: false,

                                                             FitWidthOnLoad: false,

                                                             PrintEnabled: true,

                                                             FullScreenAsMaxWindow: false,

                                                             ProgressiveLoading: false,

                                                             MinZoomSize: 0.2,

                                                             MaxZoomSize: 5,

                                                             SearchMatchAll: false,

                                                             InitViewMode: ‘Portrait’,

                                                             ViewModeToolsVisible: true,

                                                             ZoomToolsVisible: true,

                                                             NavToolsVisible: true,

                                                             CursorToolsVisible: true,

                                                             SearchToolsVisible: true,

                                                             localeChain: ‘en_US’

                                                         }

                                                         });

                 </script> 

        </div>

一切操作正常后的运行界面应该类似如下界面,

 

如果打开页面后想定位到某一页,需要修改配置文件

 

ProgressiveLoading: true

而后调用api接口,假如想跳到第10页,可以这样写

 

 function onDocumentLoaded(totalPages) {

 

                getDocViewer().gotoPage(10);

 

            }

但是这种方法可以明显看到从第一页转到第10页的加载过程,木想到好方法啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值