在HTML上打印静态SWF

时间:2014-09-17 03:45:34

标签: javascript html printing flash actionscript-2

我一直在努力尝试,没有结果,希望有人可以帮助我。

我所拥有的是嵌入了ActionScript2 SWF对象的HTML页面。 SWF是一个静态精灵,可以从javascript中获取动态文本。所以基本上看起来像一个图像。

我想打印出包含HTML + SWF的整个页面,但正如预期的那样,SWF对象的位置会出现一个空方块。

我使用javascript window.print();

打印页面

是否有拍摄SWF的快照或将其渲染为图像?在打印预览和打印文档上显示它? flash对象的大小为600x381px;

谢谢!

1 个答案:

答案 0 :(得分:1)

对不起伙计们,但我终于想出了一个解决方案。

感谢您无论如何看看。

我首先要做的是将Flash文件从ActionScript2转换为ActionScript3,以便能够使用Mike Chambers https://github.com/mikechambers/as3corelib的as3corelib。 从这个库中我使用了JGPEncoder,如下所示

import flash.external.ExternalInterface;
import flash.display.JPEGEncoderOptions;
import com.adobe.images.JPGEncoder;
import flash.display.BitmapData;
import flash.utils.ByteArray;
import flash.display.Bitmap;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.Event;

function snapShot(){

    var imgBM:Bitmap;
    var myBitmapData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
    myBitmapData.draw(stage);
    imgBM=new Bitmap(myBitmapData);
    addChild(imgBM);

    var imgBA:ByteArray;
    var jpgEncoder:JPGEncoder = new JPGEncoder(90);
     //-------Send image to php

    imgBA = jpgEncoder.encode(myBitmapData);

    var sendHeader:URLRequestHeader = new URLRequestHeader('Content-type', 'application/octet-stream');

var sendReq:URLRequest = new URLRequest("parseimg.php");
    sendReq.requestHeaders.push(sendHeader);
    sendReq.method = URLRequestMethod.POST;
    sendReq.data = imgBA;

    var sendLoader:URLLoader = new URLLoader;
    sendLoader.addEventListener(Event.COMPLETE, imageSentHandler);
    sendLoader.load(sendReq);
}

var imagePath:String;

function imageSentHandler(event:Event):void {
    var dataStr:String = event.currentTarget.data.toString();
    var resultVars:URLVariables = new URLVariables();
    resultVars.decode(dataStr);

    imagePath = "http://" + resultVars.base + resultVars.filename;
}

下一步是创建接收ByteArray的php并在服务器上创建图像文件。

<?php

if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )) {
    $filename = "your_image_name.jpg";
    $fp = fopen( $filename,"wb");
    fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] );
    fclose( $fp );

    echo "filename=".$filename."&base=".$_SERVER["HTTP_HOST"].dirname($_SERVER["PHP_SELF"]); } ?>

最后,如果图像已经存在于服务器上的文件夹中,我只需要使用CSS隐藏嵌入式Flash对象,然后显示图像。

我在document.ready

上使用jquery得到了这个
var d = new Date();
setTimeout(function(){
        $("#imgflash").attr("src", "your_image_name.jpg?"+d.getTime());
         setTimeout("window.print();", 200);
        },1000);

由于我是ActionScript和Flash的新手,所以对此代码的任何改进都是可以接受的。