2014-09-17 2 views
1

Я очень стараюсь на этом безрезультатно, надеюсь, что кто-то может мне помочь.Печать статического SWF на HTML

У меня есть HTML-страница с встроенным SWF-объектом ActionScript2. SWF - статический спрайт, который получает динамический текст из javascript. Так что в основном выглядит образ.

Я хочу распечатать всю страницу HTML + SWF, но, как и ожидалось, на предмет объекта SWF появляется пустой квадрат.

Я печатаю страницу используя javascript window.print();

Есть ли способ сделать снимок SWF или сделать его похожим на изображение? показать его на предварительном просмотре печати и на распечатанном документе? Размер flash-объекта - 600x381px;

Спасибо!

+0

Факс: Если да, то каков его URL-адрес? –

+0

страница находится в режиме онлайн, но, к сожалению, это не общедоступный доступ. Мне очень жаль. – Gaijin

ответ

1

Извините, ребята, но я, наконец, придумал решение.

Спасибо, что так или иначе.

Первое, что я сделал, это преобразовать флэш-файл из ActionScript2 в ActionScript3, чтобы иметь возможность использовать as3corelib Mike Chambers https://github.com/mikechambers/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; 
} 

Следующим шагом было создание PHP, который получает ByteArray и создает файл изображения на сервере.

<?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, и показать изображение вместо этого.

Я получил это с помощью JQuery на document.ready

var d = new Date(); 
setTimeout(function(){ 
     $("#imgflash").attr("src", "your_image_name.jpg?"+d.getTime()); 
     setTimeout("window.print();", 200); 
     },1000); 

Как я довольно новый на ActionScript и Flash, любые улучшения в этом коде любезно принято.

Смежные вопросы