视频转换工厂-进入系统后黑屏

processviewer
2023年4月3日发(作者:win8系统分区)

1.主要思路:

文档(Word,PPT等)---->转换为pdf---->转换为SWF----->使用

FlexPaper在线浏览

第一步:文档--->转换为pdf

用openoffice+jodconverter,openoffice是sun公司自己用Java写的一套开源office

软件,openoffice的缺点在于这个文件很大。

用Flashpaper实现,有绿色版,可通过命令行CMD调用。

第二步:pdf-->转swf

用pdf2swf,pdf2swf提供了命令行参数,我们可以通过Java的Runtime和Process

调用pdf2swf提供的命令将pdf转为swf.

第三步就是显示了,通过flexpaper实现

命令行中运行SWFTools文件夹名字带有空格

对于-t,-o这两个参数,就是对于源文件路径来输出文件路径的问题,如果你的文件夹的名

字中有空格的话,是不能找到文件的。

比如说:要转换的pdf源文件在E:ProgramFilesSWFTools这个文件夹下,当我

这样写-tE:或者是输出文件路径写成这样

-oE:这样都是不能成功的,因为这里面有文件夹

名含有空格,在路径的前后加上又引号就能成功啦,如

-o"E:"这样就OK啦.

per不能加载swf文件

FlexPaper加载swf时,一直处于等待状态,无法显示,检查swf的路径也没错,但就是

一直无法加载。这种情况,很有可能就是.swf文件的版本问题啦。我们运行SWFTools的

图形工具()把pdf转换为swf,但是转换后的swf也不能被Flexpaper

正常加载,确保路径没错的话,那就是版本的问题啦。查看转换时swf的版本,可以点击

Edit->Options->Viewer。

解决方法:须把pdf转换为版本为9的swf,才能让它在Flexpaper中显示。那么如何转换

为9的呢?我自己是使用cmd命令行工具来手工转换的.只须在命令行添加"-s

flashversion=9"这句,就可以转换为9的版本啦.

4.运行官方的DEMO及Flexpaper的用法

打开刚刚下载好的Flexpaper文件夹,打开里面的例子,

(1)运行官方的例子,不能加载任何的.swf(包括例子中的swf)(如果能正常显示的

话,请跳过这一步)

运行官方例子的时起,连所带的都不能加载成功,只见到右上角的圈圈一直在

动,处于等待的状态。:

这种情况,是由于Flexpaper还没获得AdobeFlash的信任,这时你可以前住

/support/documentation/en/flashplayer/help/set

tings_#119065为FlexPaper添加信任.进入网页之后,点击左边

的GlobalSecuritySettingspapel这个选项,然后在右边

为你的例子所在的文件夹添加信任。然后你再运行官方的例子,就会发现可以运行成功啦。

(2)Flexpaper的用法

我们可以查看源代码,这里不多说,直接说它的用法吧:

在前端的用法如下:

2

3

4

html中的代码,只需声明一个a标签即可

style="width:660px;height:480px;display:block">

varfp=newFlexPaperViewer(

'FlexPaperViewer',

'viewerPlaceHolder',

{config:{

SwfFile:escape(''),

Scale:0.6,

ZoomTransition:'easeOut',

ZoomTime:0.5,

ZoomInterval:0.2,

FitPageOnLoad:true,

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'

}});

基本上,这样就可以在前端显示你的Flexpaper了.

5.利用JAVA调用把PDF转化pdf为swf

[java:nogutter]viewplaincopy

1./**

2.*将pdf文件转化成swf文件

3.*@paramfileName文件的绝对路径

4.*@paramdestPath目标路径

5.*@return-1:源文件不存在,-2:格式不正确,-3:发生异常,0:转化成功

6.*@authorfanglmcreatedonJul9,20101:13:04PM

7.*/

staticintConvertPdfToSwf(StringfileName,StringdestPath){

destName="",fileExt="";

Buffercommand=newStringBuffer();

t=("//.")[("//.").length-1].toLo

werCase();

{

le=newFile(fileName);

(!()){//判断源文件是否存在

-1;

16.}elseif(!("pdf")){//判断文件是否是pdf格式的文件

-2;

18.}

{

swftoolsPath="D://SWFTools";//获取pdf转swf工具的路

(!ing(()-1,swftools

()).equals("//")){

lsPath=swftoolsPath+"//";//在目录后加"/"

23.}

(!ing(()-1,(

)).equals("//")){

th=destPath+"//";//在目录后加"/"

26.}

stFile=newFile(destPath);

(!()){//目标文件路径如果不存在,则创建目录

();

30.}

me=e().substring(0,e().length

()-4)+".swf";//目标文件名称

(swftoolsPath).append("").append(f

ileName).append("-o").append(destPath).append(destName);

spro=time().exec(ng());

edReaderbuffer=newBufferedReader(newInputStreamRe

ader(utStream()));

(ne()!=null);

lue();

37.}

38.}catch(Exceptione){

tackTrace();

-3;

41.}

42.}

使用已经编译好的FlexPaper的flash版本浏览你的文档

下载并解压FlexPaper-flash版本的zip文件,将解压出的文件放到你的项目下面,如

tomcat的webapps目录下,并用转化后生成的swf文件替换原有的文件,或者

修改中的文件为你生成的swf文件,重新发布项目即可。

调用把PDF转换为SWF的用法

代码如下:

1privatestaticvoidConvertCmd(stringfileName)

2{

3

4using(Processp=newProcess())

5{

6stringcmdStr=

h("~/SWFTools/");

7stringsavePath=

h("~/TestSWF/");

8//@""""相当于一个双引号,之所以要加@""""就是为了防止要转换的过程中,

文件夹名字带有空格,导致失败

9stringsourcePath=@""""+savePath+fileName+@"""";

10stringtargetPath=@""""+savePath+ing(0,

dexOf("."))+".swf"+@"""";

11stringargsStr="-t"+sourcePath+"-sflashversion=9-o

"+targetPath;

12//调用新进程进行转换

13ProcessStartInfopsi=newProcessStartInfo(cmdStr,argsStr);

nfo=psi;

();

rExit();

17}

18}

7.建立Flexpaper项目和修改Flexpaper源码

1.搭建Flexbuilder环境,网上很多,不在赘述。(FlexPaper要求的是Flex4,因为Flex3

有的代码不支持)。

2.通过/svn/trunk/这个地址,获取Flexpaper的源码(我下

载的是2012-1-24日的版本)。在获取前,我们需要安装SVN,这里我们使用TortoiseSVN,

安装后打开,选择file->TortoiseSVN->Repo-browser,输入上面的地址即可。(文件见附件,

文件)。

3.新建一个Flex项目,将FlexPaper源码下的src目录和local目录覆盖到你新建的Flex

项目的src目录,以及lib下的FlexPaper_文件拷贝到项目的libs目录下。

如附件所示:项目结构.jpg。

4.在默认包下打开和你项目名称同名的一个mxml文件,加入如下代码:

Xml代码

1.<?xmlversion="1.0"encoding="utf-8"?>

2.

:fp="per.*"

="100%"height="100%"applicationComplete="initApp();

"layout="absolute"

urceURL="srcview/">

6.

7.

8.

;

10.

var_aid=0;//文档ID

12.

13.[Bindable]

var_Scale:Number=1;//缩放比例

15.

16.[Bindable]

var_SwfFile:String="";//SWF文件路径

18.

19.[Bindable]

var_ZoomTransition:String="easeOut";

21.

22.[Bindable]

var_ZoomTime:Number=0.6;

24.

25.[Bindable]

var_ZoomInterval:Number=0.1;

27.

28.[Bindable]

var_FitPageOnLoad:Boolean=true;//加载后适合高度

30.

31.[Bindable]

var_FitWidthOnLoad:Boolean=true;//加载后适合宽度

33.

34.[Bindable]

var_PrintEnabled:Boolean=true;//是否支持打印

36.

37.[Bindable]

var_FullScreenAsMaxWindow:Boolean=false;//是否支持全

39.

40.[Bindable]

var_ProgressiveLoading:Boolean=false;//是否延迟加载

42.

43.[Bindable]

var_localeChain:String="zh_CN";//语言

45.

evarisFocus:Boolean=false;

47.

48.//初始化参数

efunctioninitApp():void{

ams:Object=ters;

51._Scale=getNumber(params,"Scale",1);

52._SwfFile=getString(params,"SwfFile","");

53._ZoomTransition=getString(params,"ZoomTransition","easeO

ut");

54._ZoomTime=getNumber(params,"ZoomTime",0.6);

55._ZoomInterval=getNumber(params,"ZoomInterval",0.1);

56._FitPageOnLoad=getBoolean(params,"FitPageOnLoad",fals

e);

57._FitWidthOnLoad=getBoolean(params,"FitWidthOnLoad",fals

e);

58._PrintEnabled=getBoolean(params,"PrintEnabled",true);

59._FullScreenAsMaxWindow=getBoolean(params,"FullScreenAsMax

Window",false);

60._ProgressiveLoading=getBoolean(params,"ProgressiveLoading

",true);

61._localeChain=params["localeChain"];

62.

63.//注册事件监听

ntListener(_OVER,onMouseOve

r);

ntListener(_OUT,onMouseOut);

66.

67.//开放给外部(javascript)调用

lback("hasFocus",hasFocus);

69.//lback("focus",focus);

lback("setViewerFocus",setViewerFoc

us);

71.}

72.

73.

74.

efunctiononMouseOver(event:MouseEvent):void{

s=true;

77.}

78.

efunctiononMouseOut(event:MouseEvent):void{

s=false;

81.}

82.

functionhasFocus():Boolean{

84.//("hasFocus");

isFocus;

86.}

87.

functionsetViewerFocus(isFocus:Boolean):void{

89.//("setViewerFocus");

werFocus();

91.}

92.

93./**

94.*

95.*获取String类型参数

96.*如果没有,则返回默认值

97.**/

efunctiongetString(params:Object,name:String,def:Strin

g):String{

(params[name]!=null){

params[name];

101.}

def;

103.}

104.

efunctiongetNumber(params:Object,name:String,def:Numb

er):Number{

(params[name]!=null){

params[name];

108.}

def;

110.}

111.

efunctiongetBoolean(params:Object,name:String,def:Boo

lean):Boolean{

113.//("比较:"+name);

(params[name]!=null){

params[name]=="true";

116.}

def;

118.}

119.]]>

120.

121.

124.

125.

="100%"

="100%"

="{_Scale}"

e="{_SwfFile}"

ansition="{_ZoomTransition}"

me="{_ZoomTime}"

terval="{_ZoomInterval}"

eOnLoad="{_FitPageOnLoad}"

thOnLoad="{_FitWidthOnLoad}"

reenAsMaxWindow="{_FullScreenAsMaxWindow}"

ssiveLoading="{_ProgressiveLoading}"/>

137.

5.去掉工具栏最右边[关于...]对话框的显示的按钮

源文件:

将源码中查找所有的bttnInfo,共如下三处:

Xml代码

1.1)e=(_TRANSPARENT().width>10);用"//"注

释掉

2.2)e=(_TRANSPARENT().width>10);用"//"注

释掉

3.3)e=true;改为e=false;

4.//e=true;注释掉

e=false;

6.去掉底部的logo图片:

源文件:

的属性最后行加入creationComplete处理:

Xml代码

1.

oStage="bindStageEven

ts(event)"

:fp="

per.*"

:ct="

ols.*"

:st="

ing.*"

onComplete="initApp()

">

然后加入处理initApp()函数到

Xml代码

functioninitApp():void{

ElementAt(2);

3.}

最后将源码中的函数papersLoadingHandler(event:Event)最后一行加

上:ElementAt(2);修改后如下所示:

Xml代码

tedoverridefunctionpapersLoadingHandler(event:Event):void{

2.//();

3.//e=true;

e=false;

LoadingHandler(event);

ElementAt(2);

7.}

7.菜单栏中文显示:

右键项目--->属性---->Flex编译器--->在附加的编译器参数框里加入下面一句:-locale

zh_CN-source-path=locale/{locale}-keep-all-type-selectors=true即可。

8.点击菜单后,logo又出现的问题:

源文件:修改如下代码:

Xml代码

1.

"width="20"click="Mode(ewMode);Elem

entAt(2);"toolTip="@Resource(key='SinglePage',bundle='FlexPaper')"selecte

d="{de==ewMode}"tabIndex="2"visible="{ViewMode

ToolsVisible}"includeInLayout="{ViewModeToolsVisible}"/>

2.

ttn"width="20"click="Mode('TwoPage');ElementAt

(2);"toolTip="@Resource(key='TwoPage',bundle='FlexPaper')"selected="{pape

de==E}"tabIndex="3"visible="{ViewModeToolsV

isible}"includeInLayout="{ViewModeToolsVisible}"/>

3.

n"width="20"click="Mode('Tile');ElementAt(2);"t

oolTip="@Resource(key='ThumbView',bundle='FlexPaper')"selected="{

ewMode==}"tabIndex="4"visible="{ViewModeToolsVisible}

"includeInLayout="{ViewModeToolsVisible}"/>

Xml代码

tedoverridefunctiononViewModeChanged(event:ViewModeChangedEvent):vo

id{

=formatPageNumber(ge);

ModeChanged(event);

ElementAt(2);

5.}

8.到此源码就改好了。