IE浏览器提示保存文件navcancl解决办法
点“开始->运行”输入“iexplore.exe -nohome -extoff” 打开浏览器
首先取消锁定工具栏,禁用你安装的其他第三方工具栏..
然后打开 工具->internet选项->高级->将“SmartScreen筛选器”勾掉.
Wizzer's Blog
点“开始->运行”输入“iexplore.exe -nohome -extoff” 打开浏览器
首先取消锁定工具栏,禁用你安装的其他第三方工具栏..
然后打开 工具->internet选项->高级->将“SmartScreen筛选器”勾掉.
<html> <head> <title>月影</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <style> body {margin:0px;padding:0px;font-size:12px;text-align:center;} body > div {text-align:center; margin-right:auto; margin-left:auto;} .content{width:900px;} .content .left{ float:left; width:20%; border:1px solid #FF0000; margin:3px; } .content .center{float:left;border:1px solid #FF0000;margin:3px;width:57%} .content .right{float:right;width:20%;border:1px solid #FF0000;margin:3px} .mo{height:auto;border:1px solid #CCC;margin:3px;background:#FFF} .mo h1{background:#ECF9FF;height:18px;padding:3px;cursor:move} .mo .nr{height:80px;border:1px solid #F3F3F3;margin:2px} h1{margin:0px;padding:0px;text-align:left;font-size:12px} </style> <script> var dragobj={} window.onerror=function(){return false} function on_ini(){ String.prototype.inc=function(s){return this.indexOf(s)>-1?true:false} var agent=navigator.userAgent window.isOpr=agent.inc("Opera") window.isIE=agent.inc("IE")&&!isOpr window.isMoz=agent.inc("Mozilla")&&!isOpr&&!isIE if(isMoz){ Event.prototype.__defineGetter__("x",function(){return this.clientX+2}) Event.prototype.__defineGetter__("y",function(){return this.clientY+2}) } basic_ini() } function basic_ini(){ window.$=function(obj){return typeof(obj)=="string"?document.getElementById(obj):obj} window.oDel=function(obj){if($(obj)!=null){$(obj).parentNode.removeChild($(obj))}} } window.onload=function(){ on_ini() var o=document.getElementsByTagName("h1") for(var i=0;i<o.length;i++){ o[i].onmousedown=function(e){ if(dragobj.o!=null) return false e=e||event dragobj.o=this.parentNode dragobj.xy=getxy(dragobj.o) dragobj.xx=new Array((e.x-dragobj.xy[1]),(e.y-dragobj.xy[0])) dragobj.o.style.width=dragobj.xy[2]+"px" dragobj.o.style.height=dragobj.xy[3]+"px" dragobj.o.style.left=(e.x-dragobj.xx[0])+"px" dragobj.o.style.top=(e.y-dragobj.xx[1])+"px" dragobj.o.style.position="absolute" var om=document.createElement("div") dragobj.otemp=om om.style.width=dragobj.xy[2]+"px" om.style.height=dragobj.xy[3]+"px" dragobj.o.parentNode.insertBefore(om,dragobj.o) return false } } } document.onselectstart=function(){return false} window.onfocus=function(){document.onmouseup()} window.onblur=function(){document.onmouseup()} document.onmouseup=function(){ if(dragobj.o!=null){ dragobj.o.style.width="auto" dragobj.o.style.height="auto" dragobj.otemp.parentNode.insertBefore(dragobj.o,dragobj.otemp) dragobj.o.style.position="" oDel(dragobj.otemp) dragobj={} } } document.onmousemove=function(e){ e=e||event if(dragobj.o!=null){ dragobj.o.style.left=(e.x-dragobj.xx[0])+"px" dragobj.o.style.top=(e.y-dragobj.xx[1])+"px" createtmpl(e) } } function getxy(e){ var a=new Array() var t=e.offsetTop; var l=e.offsetLeft; var w=e.offsetWidth; var h=e.offsetHeight; while(e=e.offsetParent){ t+=e.offsetTop; l+=e.offsetLeft; } a[0]=t;a[1]=l;a[2]=w;a[3]=h return a; } function inner(o,e){ var a=getxy(o) if(e.x>a[1]&&e.x<(a[1]+a[2])&&e.y>a[0]&&e.y<(a[0]+a[3])){ if(e.y<(a[0]+a[3]/2)) return 1; else return 2; }else return 0; } function createtmpl(e){ for(var i=0;i<12;i++){ if($("m"+i)==dragobj.o) continue var b=inner($("m"+i),e) if(b==0) continue dragobj.otemp.style.width=$("m"+i).offsetWidth if(b==1){ $("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i)) }else{ if($("m"+i).nextSibling==null){ $("m"+i).parentNode.appendChild(dragobj.otemp) }else{ $("m"+i).parentNode.insertBefore(dragobj.otemp,$("m"+i).nextSibling) } } return } for(var j=0;j<3;j++){ if($("dom"+j).innerHTML.inc("div")||$("dom"+j).innerHTML.inc("DIV")) continue var op=getxy($("dom"+j)) if(e.x>(op[1]+10)&&e.x<(op[1]+op[2]-10)){ $("dom"+j).appendChild(dragobj.otemp) dragobj.otemp.style.width=(op[2]-10)+"px" } } } </script> </head> <body> <div> <div id=dom0> <div id=m0> <h1>dom0</h1> <div></div> </div> <div id=m1> <h1>dom1</h1><div></div> </div> <div id=m2><h1>dom2</h1><div></div></div> <div id=m3><h1>dom3</h1><div></div></div> </div> <div id=dom1> <div id=m4><h1>dom4</h1><div></div></div> <div id=m5><h1>dom5</h1><div></div></div> <div id=m6><h1>dom6</h1><div></div></div> <div id=m7><h1>dom7</h1><div></div></div> </div> <div id=dom2> <div id=m8><h1>dom8</h1><div></div></div> <div id=m9><h1>dom9</h1><div></div></div> <div id=m10><h1>dom10</h1><div></div></div> <div id=m11><h1>dom11</h1><div></div></div> </div> </div> </body> </html>
魅族官方提供了M8的Android内核源码,包含了完整的驱动以及说明,由于MEIZU M8的物理硬件和iPhone一样平时操作的只有1个Home键无法模拟,Android的Back、Menu以及其他因素魅族放弃了M8跑Android的计划。由于M8使用的是Samsung ARM11内核的S3C6410工作频率为667MHz,山寨厂商有一定的借鉴价值。
有关魅族M8的ADB驱动 http://m8-android-kernel.googlecode.com/files/M8_6410_adb_driver.rar
M8的Android编译好固件下载,刷机方法和Wince的一致,下载后直接解压放到USB Storage的根目录 http://code.google.com/p/m8-android-kernel/source/browse/bin/m8_android.rar
M8 for Android源码托管在Google Code上面,使用SVN工具直接提取 浏览地址 http://code.google.com/p/m8-android-kernel/source/browse/#svn/trunk 需要注意的是Android开发网发现有关Modem这块代码没有,涉及到了英飞凌的机密,不过可以看到编译好的库,直接挂上即可。
SVN Checkout地址 http://m8-android-kernel.googlecode.com/svn/trunk
最后是Android123找到的有关M8的移植文章网上整理的word文档,有兴趣的网友可以DIY下,不过Android开发网表示Android和M8原始的Wince比较差距较大,个人还是建议使用完善的WinCE系统,毕竟可以直播RMVB、WinCE对于M8更适合些。
A. 串口改成串口3输出打印信息。
(一) (root=/dev/nfs init=/init nfsroot=192.168.1.10:/nfs ip=192.168.1.100 console=ttySAC2,115200
console=ttySAC2,串口2输出,必须与下面同时修改
(二) System Type —>S3C UART to use for low-level messages—>2
值设成2,即串口2输出,必须与上面同时修改。
B. Onenand驱动支持
(一) Device Drivers —>Memory Technology Device (MTD) support —>OneNAND Device Support —>
[*] Verify OneNAND page writes
<*> OneNAND Flash device via platform device driver
(二) onenand的支持
从贺超提供的linux2.6.27包drivers\mtd\onenand目录复制s3c6410.h,s3c_onenand.c,s3c_onenand.h提供对三星onenand的支持
(三) Makefile修改
drivers\mtd\onenand\Makefile文件最后添加一行:onenand-objs = s3c_onenand.o,编译s3c_onenand.o,连接进内核。
(四) 在arch\arm\mach-s3c6410\mach-smdk6410.c中
static struct platform_device pmem_gpu1_device = {
.name = “android_pmem”,
.id = 1,
.dev = { .platform_data = &pmem_gpu1_pdata },
};
#endif
的后面添加代码:
/*add by liuyihui 2009-08-21*/
/*
*添加onenand驱动支持
*/
/* OneNAND Controller */
/* OneNAND flash controller */
#define S3C64XX_PA_ONENAND (0x70100000)
#define S3C64XX_SZ_ONENAND SZ_1M
static struct resource s3c_onenand_resource[] = {
[0] = {
.start = S3C64XX_PA_ONENAND,
.end = S3C64XX_PA_ONENAND + S3C64XX_SZ_ONENAND – 1,
.flags = IORESOURCE_MEM,
}
};
或者替换新的代码:
arch\arm\plat-s3c64xx\devs.c,
linux/arch/arm/mach-s3c6400/include/mach/map.h
struct platform_device s3c_device_onenand = {
.name = “onenand”,
.id = -1,
.num_resources = ARRAY_SIZE(s3c_onenand_resource),
.resource = s3c_onenand_resource,
.dev.platform_data = &s3c_nand_mtd_part_info
};
/*add end*/
在数组static struct platform_device *smdk6410_devices[] __initdata = {的最后添加:
&s3c_device_onenand /*add by liuyihui 2009-08-21*/
(五) 分区表修改:使userdata从0x0a000000开始
文件linux/arch/arm/plat-s3c/include/plat/partition.h中:
{
.name = “cache”,
.offset = MTDPART_OFS_APPEND,
.size = (67*SZ_1M)+0x1000000,//orig:(67*SZ_1M)/*modified by cefanty 2009-08-21*/
},
(六) 修改drivers\mtd\onenand\generic.c
复制drivers\mtd\onenand\generic.c替换掉。
C. Device Drivers —>Input device support —> [] Keyboards —>
(一) 暂时去掉键盘支持,因为键盘占用了GPK14口,GPK14口在M8是USB供电开关的GPIO,拉高才能用USB
D. Device Drivers —> [*] USB support —> <*> USB Gadget Support —>
(一) <*> USB Gadget Drivers (Ethernet Gadget (with CDC Ethernet supp
(二) Ethernet Gadget (with CDC Ethernet support)
(三) [ ] RNDIS support
(四) d.1)选择Ethernet Gadget (with CDC Ethernet supp,用于把M8模拟成网卡,实现nfs挂载系统。同时去掉RNDIS support支持,因为ubuntu下没有驱动支持。
(五) drivers\usb\gadget\s3c-udc-otg-hs.c修改为USB使用外部晶振
//writel(0x20, S3C_USBOTG_PHYCLK); /*commented by liuyihui 2009-08-24*/
writel(0x00, S3C_USBOTG_PHYCLK); /*00:USB使用外部晶振。modified by liuyihui 2009-08-24*/
A. LCD驱动移植
i. drivers\video\Kconfig,搜索config FB_S3C_LTS222QV,在后面添加如下选项
config FB_S3C_LMS340KC01
bool “LMS340KC01”
—help—
TBA
ii. 添加驱动:drivers\video\samsung\s3cfb_lms340kc01.c
a) 复制刘奕辉开发的s3cfb_lms340kc01.c驱动到目录drivers\video\samsung\
b) 在drivers\video\samsung\Makefile文件最后添加内容:
obj-$(CONFIG_FB_S3C_LMS340KC01) += s3cfb_lms340kc01.o
iii. 修改drivers\video\samsung\s3cfb_fimd4x.c,在函数s3cfb_set_gpio最后注释代码,添加:
#if 0/*commented by liuyihui 2009-08-24*/
/* module reset */
if (gpio_is_valid(S3C64XX_GPN(5))) {
err = gpio_request(S3C64XX_GPN(5), “GPN”);
if (err) {
printk(KERN_ERR “failed to request GPN for ”
“lcd reset control\n”);
return err;
}
gpio_direction_output(S3C64XX_GPN(5), 1);
}
mdelay(100);
gpio_set_value(S3C64XX_GPN(5), 0);
mdelay(10);
gpio_set_value(S3C64XX_GPN(5), 1);
mdelay(10);
gpio_free(S3C64XX_GPF(15));
gpio_free(S3C64XX_GPN(5));
#endif
/*add by liuyihui 2009-08-24*/
/*
*打开M8 LCD需要用到的GPIO口
*/
#if 1 //M8 GPIO set hight
/* module reset *///LCD_nRESET_SHIFT/*4*/
if (gpio_is_valid(S3C64XX_GPQ(4))) {
err = gpio_request(S3C64XX_GPQ(4), “GPQ”);
if (err) {
printk(KERN_ERR “failed to request GPQ for ”
“lcd reset control\n”);
return err;
}
gpio_direction_output(S3C64XX_GPQ(4), 1);
}
mdelay(100);
gpio_free(S3C64XX_GPQ(4));
/* module reset *///LCD_nSS_SHIFT/*5*/
if (gpio_is_valid(S3C64XX_GPQ(5))) {
err = gpio_request(S3C64XX_GPQ(5), “GPQ”);
if (err) {
printk(KERN_ERR “failed to request GPQ for ”
“lcd reset control\n”);
return err;
}
gpio_direction_output(S3C64XX_GPQ(5), 0);
}
mdelay(100);
gpio_free(S3C64XX_GPQ(5));
/* module reset *///LCD_MOSI_SHIFT/*7*/
if (gpio_is_valid(S3C64XX_GPQ(6))) {
err = gpio_request(S3C64XX_GPQ(6), “GPQ”);
if (err) {
printk(KERN_ERR “failed to request GPQ for ”
“lcd reset control\n”);
return err;
}
gpio_direction_output(S3C64XX_GPQ(6), 1);
}
mdelay(100);
gpio_free(S3C64XX_GPQ(6));
/* module reset *///LCD_MOSI_SHIFT/*7*/
if (gpio_is_valid(S3C64XX_GPQ(7))) {
err = gpio_request(S3C64XX_GPQ(7), “GPQ”);
if (err) {
printk(KERN_ERR “failed to request GPQ for ”
“lcd reset control\n”);
return err;
}
gpio_direction_output(S3C64XX_GPQ(7), 1);
}
mdelay(100);
gpio_free(S3C64XX_GPQ(7));
/* module reset *///LCD_CLK_SHIFT/*8*/
if (gpio_is_valid(S3C64XX_GPQ(8))) {
err = gpio_request(S3C64XX_GPQ(8), “GPQ”);
if (err) {
printk(KERN_ERR “failed to request GPQ for ”
“lcd reset control\n”);
return err;
}
gpio_direction_output(S3C64XX_GPQ(8), 1);
}
mdelay(100);
gpio_free(S3C64XX_GPQ(8));
#endif
return 0;
}
/*add end*/
c)
iv. 修改drivers\video\samsung\s3cfb_spi.c,在函数s3cfb_set_gpio最后注释代码,添加:
在代码#elif defined(CONFIG_PLAT_S3C64XX)后面添加:
#define MEIZU_M8
#ifdef MEIZU_M8
#define S3C_FB_SPI_CLK(x) (S3C64XX_GPQ(8 + ( 4)))
#define S3C_FB_SPI_MOSI(x) (S3C64XX_GPQ(7 + (4)))
#define S3C_FB_SPI_CS(x) (S3C64XX_GPQ(6 + (4)))
#else
#define S3C_FB_SPI_CLK(x) (S3C64XX_GPC(1 + (ch * 4)))
#define S3C_FB_SPI_MOSI(x) (S3C64XX_GPC(2 + (ch * 4)))
#define S3C_FB_SPI_CS(x) (S3C64XX_GPC(3 + (ch * 4)))
#endif
B. 触摸屏移植
drivers\input\touchscreen:synaptics510_i2c.c,synaptics510_i2c.h,Makefile,Kconfig
C. 按键移植
覆盖如下文件:目录drivers\input\keyboard\下的:gpio_keys.c
To build busybox
• Download the latest version of busybox from the following website. At the time of writing the latest version was v.1.13.3.
http://www.busybox.net
• Extract the busybox source:
tar jxf busybox-1.13.3.tar.bz2
• Configure busybox by running menuconfig
cd busybox-1.13.3/
make menuconfig
• In menuconfig set the following options
Busybox Settings –> Build Options –> Build Busybox as a static binary (no shared libs) – Enable this option by pressing “Y”
Busybox Settings –> Build Options –> Cross compiler prefix – Set this option equal to “arm-none-linux-gnueabi-”
Busybox Settings –> Installation Options –> Don’t use /usr – Enable this option by pressing “Y”
Linux Module Utilities —> [ ] Simplified modutils 这项不能选,否则insmod 驱动模块加载会提示找不到*.ko驱动文件的路径
• Export path to where the cross-compiler is located on the host, for example:
export PATH=/opt/arm/arm-2007q3/bin:$PATH
• Build busybox
make
Installing Busybox
________________________________________
To install busybox in the target file-system
• Create a /bin directory in the target file-system. For example:
mkdir /<path-to-android-fs>/bin
• Copy the busybox binary to the /bin directory in the target file-system
cp busybox /<path-to-android-fs>/bin
• Install the busybox command line tools on the target by executing the following commands:
cd /bin
./busybox –install
Make the Busybox shell the default shell
________________________________________
To make the busybox shell the default shell, edit the file “init.rc” in the target file-system as follows:
• Edit the console service so that it runs the busybox shell and not the default shell by replacing:
service console /system/bin/sh
With:
service console /bin/sh
• Add the path of the busybox command line tools to the system path variable by replacing:
export PATH /sbin:/system/sbin:/system/bin:/system/xbin
With
export PATH /bin:/sbin:/system/sbin:/system/bin:/system/xbin
cupcake 1.5版需要改写下列文件。
A. 编译mountd,并在文件系统中启动这一服务。
修改 system/core/mountd/Android.mk文件,开放最后一行
# disabled – we are using vold now instead
# include $(BUILD_EXECUTABLE)
为:
# disabled – we are using vold now instead
include $(BUILD_EXECUTABLE)
B. 增加 安装mountd.conf 文件
修改 system/core/rootdir/init.rc文件
释放下两行:
service mountd /system/bin/mountd
socket mountd stream 0660 root mount
C. 修改 system/core/rootdir/Android.mk 文件, 增加 etc/mountd.conf \,如下:
copy_from := \
etc/dbus.conf \
etc/init.goldfish.sh \
etc/mountd.conf \
etc/hosts
D. 修改根文件系统的system\etc \mountd.conf文件:
block_device /dev/block/mmcblk0
1、星期一至五,会按设定时间关机,你可以在出现关机提示时点取消(倒计时30秒);
2、星期六日,启动程序即提示关机,无操作则自动关机,若点取消,还会在设定的时间再一次提示关机(倒计时30秒);
3、按*号后输入密码,退出程序回到桌面;
4、参数设置:找到安装目录下的SystemConfig.xml文件,其中starturl为起始网页地址;returntime为多久无操作返回起始网页(单位:分钟);offtime为每天关机时间;exitkey为退出程序的密码;
5、软件需要.NET2.0环境,环境安装包有些大,就不上传了,请到 http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=zh-cn 下载
开源地址:http://code.google.com/p/full-screen-touch-browser/
可以通过本站下方的EMAIL与作者交流~:)
<?php //设定字符集 header('Content-Type:text/html;charset=utf-8'); //调用webserver接口class类 require_once('./lib/nusoap.php'); require_once('Article.class.php'); //封装文章信息类 require_once('Attribute.class.php'); //封装字段attr类 require_once('Appendix.class.php'); //封装附件信息类 //-------------------封装推送信息内容开始 $a1 = new Attribute(); $a1->setAttrName('aaa'); $a1->setAttrValue('aaaaa'); $a2 = new Attribute(); $a2->setAttrName('bbb'); $a2->setAttrValue('bbbbbb'); $ar[] = $a1; $ar[] = $a2; echo $ar[0]->getAttrName('aaa'); $Article = new Article(); $Article->setArticleContent(mb_convert_encoding('vvvvvvvvvvv<a href="a.txt">a.txt</a>...<img src="tmp.jpg">','UTF-8','GBK')); //文章正文 $Article->setArticleTitle(mb_convert_encoding("12212AAABBBABAAA".date('Ymd'),'UTF-8','GBK')); //文章题目 $Article->setAttr($ar); //文章定制属性组 $Article->setCreateTime(date('YmdHis')); //文章创立时间 $Article->setDepartment("tongjiju"); //用户部门 $Article->setDescription("description"); //文章描述 $Article->setImportant("0"); //文章级别 $Article->setKeyword("keyword"); //文章关键字 $Article->setLoginName("tongjiju"); //用户登录名 $Article->setModifyTime(date('YmdHis')); //文章修改时间 $Article->setPassword("tongjiju"); //用登录口令 $Article->setWebName(mb_convert_encoding("市政府子网站群二期 > 市统计局 > 市情简介",'UTF-8','GBK')); //网站的名称 $Article->setCommendId(0); $client = new nusoap_client("http://221.122.*.*:7006/cmsweb/services/TransferArticle?wsdl", true); $err = $client->getError(); if ($err) { echo "<h2>Constructor error</h2><pre>". $err ."</pre>"; } $godata=''; //文章中存在附件 'finishMark'=>false------------------------------------------------------------- $godata=array('article'=>$Article,'finishMark'=>false); $result = $client->call("transferContent", $godata); if ($client->fault) { echo "<h2>Fault</h2><pre>"; print_r($result); echo "</pre>"; } else { $err = $client->getError(); if ($err) { echo "<h2>Error</h2><pre>" . $err . "</pre>"; } else { echo "<h2>Result</h2><pre>"; print_r($result); echo "</pre>"; } } $aid=$result['transferContentReturn']; if ($aid){ //第一个附件 'finishMark'=>false------------------------------------------------------------- $filepath='a.txt'; $fp=fopen($filepath, "rb"); $filedata=fread($fp, filesize($filepath)); fclose($fp); $Appendix = new Appendix(); $Appendix->setFileContent(base64_encode($filedata)); $Appendix->setFileName('a.txt'); $Appendix->setFileType('txt'); $godataf=array('aid'=>$aid,'apd'=>$Appendix,'finishMark'=>false); $resultf = $client->call("transferAppendix", $godataf); echo '<br><br>'; echo "<h2>Result_f</h2><pre>"; print_r($resultf); echo "</pre>"; //最后附件 'finishMark'=>true------------------------------------------------------------- $filepath2='tmp.jpg'; $fp2=fopen($filepath2, "rb"); $filedata2=fread($fp2, filesize($filepath2)); fclose($fp2); $Appendix2 = new Appendix(); $Appendix2->setFileContent(base64_encode($filedata2)); $Appendix2->setFileName('tmp.jpg'); $Appendix2->setFileType('image_title');//image_title 此图片为标题图 $godataf2=array('aid'=>$aid,'apd'=>$Appendix2,'finishMark'=>true); $resultf2 = $client->call("transferAppendix", $godataf2); echo '<br><br>'; echo "<h2>Result_f2</h2><pre>"; print_r($resultf2); echo "</pre>"; } ?>
1、使用SaveAsPDFandXPS将office文档转换成PDF
微软原计划让Office 2007直接支持保存为PDF格式,但引起了Adobe的不满,并被指责为垄断,最终被迫放弃,改为以插件的形式予以支持,插件大家都知道怎么回事儿,默认不装,要用你的自己找来装上。不过微软针对这件事情也做出了一个回应:发布XPS, XPS则是微软自己利用XML技术开发的新型文档格式。
该插件支持Office 2007的8个组件,包括Word、Excel、Access、PowerPoint、InfoPath、OneNote、Publisher和Visio。安装插件后,用户即可在上述组件中将相应文档存储为PDF格式或XPS格式,还可以方便地将文档保存为PDF/XPS格式的E-mail附件。
2、下载 SWFTools
SWFTools 是一组用来处理 Flash 的 swf 文件的工具包,包括:
1. 合并工具 swfcombine
2. 抽取工具 swfextract
3. PDF/JPEG/PNG/AVI/TTF/WAV 到 SWF 的转换工具 :pdf2swf, jpeg2swf, png2swf, avi2swf, font2swf, and wav2swf|
4. 文本解析工具 swfstrings
5. SWF 解析器 swfdump
6. SWF 读写库 rfxswflib
其中把pdf转成swf的工具就是pdf2swf了。在命令行中运行pdf2swf src.pdf des.swf一般能满足需求。而命令行参数可以通过pdf2swf -f得到:
-h , –help Print short help message and exit 打印帮助信息
-V , –version Print version info and exit 打印版本号
-o , –output file.swf Direct output to file.swf. If file.swf contains ‘13568621′ (file13568630.swf), then each page指定输出的swf文件名
-p , –pages range Convert only pages in range with range e.g. 1-20
or 1,4,6,9-11 or
指定转换的页面范围,使用的页码描述方法与打印机打印文件时候的选页一样
-P , –password password Use password for deciphering the pdf.指定打开pdf的密码
-v , –verbose Be verbose. Use more than one -v for greater effect.转换时输出详细的内容
-z , –zlib Use Flash 6 (MX) zlib compression.使用Flash 6的zlib压缩机制
-i , –ignore Allows pdf2swf to change the draw order of the pdf. This may make the generated允许程序修改pdf的绘制顺序,可能会导致结果与原来有差异
-j , –jpegquality quality Set quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)设置转换其中的jpeg图片的质量,从0到100,默认值是85。
-s , –set param=value Set a SWF encoder specific parameter. See pdf2swf -s help for more information. 设置SWF转码时候的参数,具体参数可以用pdf2swf -s help获取
-w , –samewindow When converting pdf hyperlinks, don’t make the links open a new window. 设置转换后的swf打开原pdf中的连接时使用相同的窗口
-t , –stop Insert a stop() command in each page. 在每页结尾添加一个stop()命令
-T , –flashversion num Set Flash Version in the SWF header to num. 设置SWF所使用的flash版本号
-F , –fontdir directory Add directory to the font search path. 指定字体文件所在路径
-b , –defaultviewer Link a standard viewer to the swf file. 指定默认的swf导航文件,用来翻页、放大缩小等等
-l , –defaultloader Link a standard preloader to the swf file which will be displayed while the main swf is loading. 指定默认的swf加载文件,用来显示加载进程效果
-B , –viewer filename Link viewer filename to the swf file. 指定swf导航文件,作用同-b
-L , –preloader filename Link preloader filename to the swf file. 指定swf加载文件,作用同-l
-q , –quiet Suppress normal messages. Use -qq to suppress warnings, also. 不打印普通信息,用-qq就不打印警告信息。
-S , –shapes Don’t use SWF Fonts, but store everything as shape. 不使用字体,所有都转为形状。
-f , –fonts Store full fonts in SWF. (Don’t reduce to used characters). 在swf中保存全部字体。
-G , –flatten Remove as many clip layers from file as possible. 在文件中尽量去除影片层,合并它们
-I , –info Don’t do actual conversion, just display a list of all pages in the PDF. 不做实际转换,仅显示PDF的信息。
-Q , –maxtime n Abort conversion after n seconds. Only available on Unix. 如果运行时间超时则退出。
3、java程序,实现上传PDF自动转换成SWF文件
//ajax方法,先解密传过来的文件名,根据判断生成SWF文件后跳转至FLASH页面 if (ajaxAction.equals("exeflash")) //把PDF成SWF { String fn = DecodeUtil.Decrypt(StringUtil.null2String(request.getParameter("fn")).trim()).toLowerCase(); try { if (!"".equals(fn) && fn.indexOf("/") > -1 && fn.indexOf(".pdf") > -1) { Map webfileupmap = (Map) Globals.SYS_UPLOAD_CONFIG.get("webfile"); String webfilepath = StringUtil.null2String(webfileupmap.get("path")).replace("\\", "\\\\"); fn = fn.substring(fn.lastIndexOf("/") + 1);//aa.pdf webfilepath = webfilepath + fn; File f = new File(webfilepath); if (!f.exists()) { return "error"; //如果PDF文件不存在则退出 } Map webupmap = (Map) Globals.SYS_UPLOAD_CONFIG.get("web"); String webpath = StringUtil.null2String(webupmap.get("path")).replace("\\", "\\\\"); String urlpath = StringUtil.null2String(webupmap.get("urlpath")); String wname = fn.substring(0, fn.indexOf(".")) + ".swf"; webpath = webpath + wname; String wurl = urlpath + wname; boolean issc = false; File f2 = new File(webpath); if (!f2.exists()) { issc = true; //如果文件不存在则生成 } if (issc) { String cmd = "C:\\SWFTools\\pdf2swf " + webfilepath + " -o " + webpath + " -T 9"; if (StringUtil.executeCmdFlash(cmd) == false) { return "error"; } System.out.println("cmd::::::" + cmd); } File f1 = new File(webpath); if (f1.exists()) { ajaxstr = DecodeUtil.Encrypt(wurl); } } else { return "error"; } } catch (Exception e) { Globals.Logger("发生错误:" + e, 2); } }
注意:
String cmd = “C:\\SWFTools\\pdf2swf ” + webfilepath + ” -o ” + webpath + ” -T 9″;
加 “-T 9” 参数,设置输出版本为flash9,解决PDF文件只有一页,生成的swf不能播放的问题。
另外,若PDF内表格元素过多,在转换时会抛出一堆异常错误。似乎还没有好的解决办法?
//java调用cmd命令行方法 /** * 运行可执行文件 * * @param cmd * @return String */ public static synchronized boolean executeCmdFlash(String cmd) { try { final Process process = Runtime.getRuntime().exec(cmd); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { process.destroy(); } }); InputStreamReader inputstreamreader = new InputStreamReader(process.getInputStream()); char c = (char) inputstreamreader.read(); if (c != '\uFFFF') stdout.append(c); while (c != '\uFFFF') { if (!inputstreamreader.ready()) { System.out.println(stdout); try { process.exitValue(); break; } catch (IllegalThreadStateException _ex) { try { Thread.sleep(100L); } catch (InterruptedException _ex2) { } } } else { c = (char) inputstreamreader.read(); stdout.append(c); } } try { inputstreamreader.close(); } catch (IOException ioexception2) { System.err.println("RunCmd : Error closing InputStream " + ioexception2); return false; } } catch (Throwable e) { e.printStackTrace(); Globals.Logger("发生错误:" + e, 2); return false; } return true; }
4、利用FlexPaper展示
FlexPaper是一个被设计用来与PDF2SWF一起使用,开源轻量级的在浏览器上显示各种文档的组件, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用。也可以通过将一些例如Word、PPT等文档转成PDF,然后实现在线浏览。
SwfFile : escape(host+"/upload/web/2010-05-24-10-21-51139.swf"), Scale : 0.6, ZoomTransition : "easeOut", ZoomTime : 0.5, ZoomInterval : 0.1, FitPageOnLoad : false, FitWidthOnLoad : true, PrintEnabled : false, FullScreenAsMaxWindow : true, localeChain: "zh_CN" //设置为中文 };
5、演示地址
http://www.4th-games.org.cn/sis/public/info.html?doAction=scsg&bsdxid=1009&cdate=all
让电脑替你说"I IOVE YOU":新建一个记事本,在里面输入 CreateObject(“SAPI.SpVoice”).Speak “I love YOU” 保存扩展名为 .VBS 文件 如:我爱你.vbs 双击运行,电脑就会说 i love you 了,如果编好给心爱的人的话一定会让TA惊喜不已!
安装Eclipse 插件(ADT)
要下载和安装ADT 插件,跟着Google 提供给开发者的步骤:
1. 启动Eclipse,接着选择”Help”>”Software Updates”>”Find and Insta ll”
2. 在出现的对话框中,选择”Search for new features to insta ll” 点击”New”
3. 点击”New Remote Site”
4. 在结果对话框中,为远程站点键入一个名称(如:Android Plugin)并键入
这个URL 作为它的URL:
https://dl-ssl.google.com/android/eclipse/
点击OK。(可能要翻哦墙哦)
5. 现在你应该看到新站点加载到搜索列表中(并选中),点击”Finish”。
6. 在后来搜索结果对话框中,选择”Android Plugin”>”Developer Tools”复选
框。这将会选择”Android Developer Tools”和”Android Editors”特性。
Android Editors 特性是可选的,但是推荐。
现在点击”Newt”
7. 阅读许可协议,选择”Accept terms of th license agreement”, 点击”Next”
8. 点击”Finish”
9. ADT 插件没有被签名;总之,你可以点击”Insta ll All”接受安装
10. 重启Eclipse
11. 在重启后,更新你的Eclipse 配置来指向SDK 目录:
a.选择”Window”>”Preferences” 来打开配置面板。(Mac OS
X:”Eclipse”>”Preferences”)
b.从左边面板中选择”Android”
c.对于主面板中”SDK Location”,点击”Browse”并选中SDK 目录位置
d.点击”Apply”,接着点”OK”