视频转换工厂-进入系统后黑屏
![processviewer](/uploads/image/0135.jpg)
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图片:
源文件:
将
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.到此源码就改好了。
发布评论