- 浏览: 136992 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
Ken艹小哲:
太赞了 哥们 加扣
猜数字问题的最少步数算法. -
chenyuan122912:
...
解决AS3 Socket编程中最令人头疼的问题 -
hyx0914:
有源代码打包下载的吗?
Flex地图分块加载的实现 -
tianhai110:
非常有价值的 测试总结
时间效率,Timer和EnterFrame在FP 10.1之后测试和建议 -
763675117:
你好,fengxiangpiao,看了你的文档,我的需求和你差 ...
解决MovieClip打印问题 转
困扰我多天的MovieClip打印问题终于解决了,这就实现了PDF转成SWF后,用户在获取授权后,仍然支持其打印文档(即打印SWF)啦!是令人高兴的事情,“世上无难事,只怕有心人”,只要专注任何问题都可以一步步得到解决的。
我的打印功能实现截图:
我已经解决的打印问题:实现文档全部打印;支持单独某页(即MovieClip的某帧)的打印;默认全屏打印,在缩放模式下,支持自动调整还原后再打印,从而保证文档充满页面。
没有实现的打印功能:1.用户自定义多页打印(不是单页打,也不是全打),这个很简单,只是没这需求,我就没添加该功能。2.打印时的预览 3.打印自定义设置(我实现的是页面自适应,不论是A4或B5,都是自动充满页面的),有兴趣的朋友可以在我的基础上对这几方面做进一步的研究。
很遗憾,对MovieClip的帧生成缩略图工作,没有取得进展,网上没找到相关资料,但我把该任务的一些小问题解决了,有时间的话,我会继续研究的。毕竟领导对该工作也是很期待的很支持的,这功能确实能提高用户体验。
我的该任务存在的小问题包括:文档的移动(上下左右按钮控制的移动)、鼠标拖动文档(平移文档)、文档位置自动还原功能(自动充满显示页面)、文档放大缩小时中心位置控制等等。注:这里的文档指的是PDF转换生成的SWF,即加载进来要控制的MovieClip。
下面介绍一下我在实现MovieClip打印功能时对我帮助很大的网络资源。
首先是,Chris给出的方案:AS3 Using PrintJob to print a MovieClip (网址:http://stackoverflow.com/questions/1422259/as3-using-printjob-to-print-a-movieclip)他对我帮助是很大的,我非常感激。虽然他的代码功能并没完全解决我的打印问题,但是它给了我思路,给我指明了一条可能可行的路,他首先迈出了伟大的第一步,我的改进完全是在他的代码的基础上,结合我的实际问题修改的。建议遇到相同问题的网友,首先要阅读理解好他的源代码。现转载他的代码如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->function printMovieClip(clip:MovieClip)
{
var printJob:PrintJob=new PrintJob();
var numPages:int=0;
var printArea:Rectangle;
var printHeight:Number;
var printY:int=0;
if (printJob.start())
{ /* Resize movie clip to fit within page width */
if (clip.width > printJob.pageWidth)
{
clip.width=printJob.pageWidth;
clip.scaleY=clip.scaleX;
}
/* Store reference to print area in a new variable! Will save on scaling calculations later */
printArea=new Rectangle(0, 0, printJob.pageWidth / clip.scaleX, printJob.pageHeight / clip.scaleY);
numPages=Math.ceil(clip.height / printJob.pageHeight);
/* Add pages to print job */
for (var i:int=0; i < numPages; i++)
{
printJob.addPage(clip, printArea);
printArea.y+=printArea.height;
}
/* Send print job to printer */
printJob.send();
/* Delete job from memory */
printJob=null;
}
}
printMovieClip(testMC);
他主要用的是flash.printing.PrintJob,PrintJob 类用于创建内容并将其打印为一页或多页。此类允许您呈现对用户为可见、动态或在屏幕以外的内容,通过一个“打印”对话框提示用户,以及按照与内容的比例相称的比例打印未缩放的文档。此功能特别适用于呈现和打印动态内容,例如数据库内容和动态文本。
我个人认为 PrintJob是比较灵活(我指的是打印内容的灵活和打印设置的灵活方面)的打印类的,这原本就是flash里的类。Flex AS3中仍然可以使用,Flex中有对该类的重写即FlexPrintJob,FlexPrintJob 类是 flash.printing.PrintJob 类的包装对象。它支持自动对多个页面上的输出进行切片和分页,并且将网格内容进行缩放以适合打印机的页面大小。 我原本想用该类对象实现我的打印的,但是FlexPrintJob不够灵活,只支持UIComponent对象的打印。其中的关键方法addObject(obj:IUIComponent, scaleType:String = "matchWidth"):void 将 UIComponent 对象添加到正在打印的对象列表。
下面是使用该FlexPrintJob的例子,Flex中实现一般的UI控件的打印,还是很方便的。转载自Adobe的http://www.adobe.us/livedocs/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=printing_085_07.html
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><?xml version="1.0"?>
<!-- printing\DGPrint.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.printing.*;
// Create a PrintJob instance.
private function doPrint():void {
// Create an instance of the FlexPrintJob class.
var printJob:FlexPrintJob = new FlexPrintJob();
// Start the print job.
if (printJob.start() != true) return;
// Add the object to print. Do not scale it.
printJob.addObject(myDataGrid, FlexPrintJobScaleType.NONE);
// Send the job to the printer.
printJob.send();
}
]]>
</mx:Script>
<mx:VBox id="myVBox">
<mx:DataGrid id="myDataGrid" width="300">
<mx:dataProvider>
<mx:Object Product="Flash" Code="1000"/>
<mx:Object Product="Flex" Code="2000"/>
<mx:Object Product="ColdFusion" Code="3000"/>
<mx:Object Product="JRun" Code="4000"/>
</mx:dataProvider>
</mx:DataGrid>
<mx:Button id="myButton"
label="Print"
click="doPrint();"/>
</mx:VBox>
</mx:Application>
上面两个资源是我主要参考的资源,网友可以搜索更多打印例子,应该好好利用互联网资源。
最后介绍和分析我的代码。我的代码最重要的改进就是解决多页连打问题(即MovieClip的所有帧一次全打出来)。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1//打印函数
2private function printMovieClip(clip:MovieClip):void
3{
4 var printJob:PrintJob=new PrintJob();
5 var printArea:Rectangle;
6 if (!printJob.start())
7 return;
8 //获取打印页
9 var printPage:int=selectPages.selectedItem.data;
10 if (printPage == 0) //打印所有页面,即MovieClip的所有帧
11 {
12 for (var i:int=1; i <= clip.totalFrames; i++)
13 {
14 clip.gotoAndStop(i);
15 /* Resize movie clip to fit within page width */
16 clip.width=printJob.pageWidth;
17 clip.scaleY=clip.scaleX;
18 /* Store reference to print area in a new variable! Will save on scaling */
19 printArea=new Rectangle(0, 0, printJob.pageWidth, printJob.pageHeight);
20 //numPages=Math.ceil(clip.height / printJob.pageHeight);
21 /* Add pages to print job */
22 printJob.addPage(clip, printArea);
23 }
24 }
25 else ///单独打印指定页面,即MovieClip的某帧打印
26 {
27 clip.gotoAndStop(printPage);
28 /* Resize movie clip to fit within page width */
29 clip.width=printJob.pageWidth;
30 clip.scaleY=clip.scaleX;
31 printArea=new Rectangle(0, 0, printJob.pageWidth, printJob.pageHeight);
32 /* Add pages to print job */
33 printJob.addPage(clip, printArea);
34 }
35
36 /* Send print job to printer */
37 printJob.send();
38 /* Delete job from memory */
39 printJob=null;
40
41 }
评论
发表评论
-
Flex 自动获取焦点 监听全局键盘事件
2010-11-27 16:51 981这是《Flex第一步》里面一个朋友问我的问题,特此拿出分享一下 ... -
在接口中定义属性引起的An internal Builder Error错误
2010-11-12 21:24 752今天调试程序时,出现An internal Builder ... -
Label鼠标移上显示手形
2010-11-10 21:03 847软件编程牛人网 要想鼠标在Label上显示为手型, ... -
flex 3 从页面url中取参数取值的完美解决方案
2010-11-04 16:04 603在家上网赚钱更容易 1:当用http://xxxxx/xx ... -
汉字转为16进制的unicode
2010-11-04 12:28 1291在家上网赚钱更容易 Flex引入外部字体时使用unicode ... -
Flex内存监测及优化技巧
2010-11-04 12:27 829在家上网赚钱更容易 ... -
FlashPlayer垃圾回收机制
2010-11-04 12:26 862在家上网赚钱更容易 ... -
Flex 数据易犯错误: 常见误用和错误
2010-11-03 21:51 683在家上网赚钱更容易 忘记解除和承担内查泄漏风险 ... -
Flex地图分块加载的实现
2010-11-03 21:47 1242在家上网赚钱更容易 首先我们确定几个关键点:窗口大小 ... -
Flex ComboBox中的Tree itemRender ClassFactory 实现
2010-11-01 20:36 1016想要实现ComboBox下来出来一颗树,用itemR ... -
ComboBox与itemRenderer
2010-11-01 20:34 767转自:http://hi.baidu.com/half_c ... -
修改ScrollBar的ScrollTrack高度
2010-11-01 18:18 1026<?xml version="1.0" ... -
去掉ScrollBar的两个箭头
2010-10-29 18:33 789在样式中加入下面两行upArrowSkin: ClassRef ... -
VerifyError: Error #1033: Cpool 项 246 类型错误
2010-10-28 12:24 2543在家上网赚钱更容易 最近,由于项目需要,安装了flash b ... -
用jsfl 扩展你的 flash
2010-10-27 15:19 780为什么要学习jsfl? 作为一个有些经验的FLASH开发 ... -
Flash编辑下使用的语言--JSFL
2010-10-27 15:19 1212JSFL概述 JSFL是在Flash编辑环境下使用 ... -
JSFL与Flash的完美结合
2010-10-27 15:18 1195作为一个有些经验的Flas ... -
flash as3 GUID UUID 生成类
2010-10-26 10:24 846package { import flash.dis ... -
flex里创建uuid的方法
2010-10-26 10:23 885import mx.utils.UIDUtil;var ... -
应用DataGrid项双击事件
2010-10-26 09:15 949软件编程牛人 默认Flex不使用双击事件 如需使用可 ...
相关推荐
这篇内容将详细讲解如何利用提供的`AVM1Movie_To_MovieClip`类将AMV1影片转换为Flash中的MovieClip对象,以便于进一步的编程操作。 首先,ActionScript 3(AS3)是Flash平台的主要编程语言,它提供了强大的功能来...
MovieClip做背景放大拖动问题
这篇博文“FLASH CS3创建的MovieClip通过代码加入到场景”探讨了如何利用ActionScript 2.0(Flash CS3所使用的编程语言)将MovieClip对象动态地添加到舞台上。MovieClip是Flash中的一个核心概念,它是一种可以包含多...
这个压缩包中的资源主要集中在如何在Flex项目中显示不同的视觉元素,如MovieClip、Sprite和文字,这些都是构建交互式用户界面的基本组件。 1. **MovieClip**: MovieClip是ActionScript3中的一个类,它继承自Sprite...
在描述的博文中,作者可能详细阐述了如何配置和使用这种方法,以及在实际项目中遇到的问题和解决方案。遗憾的是,由于没有提供具体的内容,我们无法给出更多细节。 在项目结构方面,`.actionScriptProperties`、`....
flash的MovieClip.as,用于影片属性控制。
3. **添加要打印的内容**:Flex中,你可以将`DisplayObject`实例(如`Sprite`或`MovieClip`)添加到打印任务中。这通常涉及将屏幕上的可视元素复制到打印作业。使用`printJob.addObject()`方法,传入要打印的`...
pixi-movieclip-speed 根据当前浏览器的fps速率动态调整PIXI movieclip的动画速度。 当PIXI movieclip动画速度设置在0到1之间时,假定您的浏览器始终以60fps运行。 想象一下,精灵表格动画以24fps导出并且动画速度...
转盘类源码是Flash开发中的一个重要组成部分,主要用于创建各种抽奖、游戏或互动展示效果。在AS3(ActionScript 3)中,转盘通常是一个...记住,深入理解源码不仅有助于学习技术,也能提升解决问题和创新设计的能力。
例如,`movieClip.rotation += angle` 这行代码可以让movieClip实例沿着Z轴按angle的角度进行旋转。更进一步,利用 Tween 类或内置的 easing 函数,可以创建平滑的旋转动画,使旋转过程更加自然流畅。 "Flash旋转...
SWF转PNG序列图工具是一种专门用于将Adobe Flash(SWF)文件转换为PNG图像序列的软件或服务。这种工具的目的是为了方便处理SWF文件中的动画内容,尤其是在SWF不支持或者无法直接导出为其他格式时。SWF文件通常是...
2. **MovieClip**:在Flash中,MovieClip是一个可以包含多个帧和动作的动画对象。我们可以创建一个MovieClip来表示旋转的光环,并在其时间轴上设置动画帧以实现旋转效果。 3. **颜色渐变**:要实现五彩光环的效果,...
2. **时间轴控制**:通过`MovieClip`对象的`play()`和`stop()`方法来控制转盘的动画播放,实现旋转和停止。 3. **速度控制**:“获取开始速度”和“获取停止速度”意味着转盘的旋转速度是可变的。这可能涉及到设置...
你可以通过实例化一个MovieClip并访问其`play()`和`stop()`方法来控制播放。 3. **倒序播放的核心概念** - **gotoAndStop()**:此方法用于使电影剪辑跳转到指定帧并停止播放。 - **totalFrames**:MovieClip对象...
在As3中将AS2中的深度改成了标签,一直没闹明白怎么使用,一般都是直接addChild把mc放到最上面 今天做的这个因为本身在mc中,所以addChild会吧mc再添加一次,造成mc重复 研究了很久,发现了这个,并非原创,欢迎大家...
总的来说,Egret图集拆分工具是Python编程技术与Egret游戏开发实践相结合的产物,它为解决特定的资源管理问题提供了便利,体现了编程在游戏开发中的实用性与灵活性。对于Egret开发者来说,掌握这类工具的使用方法...