Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Печать с PrintJob на несколько страниц (Flash 8), очередной баг флеша? (http://www.flasher.ru/forum/showthread.php?t=107917)

rashrash 12.02.2008 13:33

Печать с PrintJob на несколько страниц (Flash 8), очередной баг флеша?
 
Задача: Распечатать произвольного размера мувик.

Проблема: собственно работает все, кроме правильного определения ширины и высоты страницы. В итоге печатается страница урезано справа и снизу.
Посмотрите пример и запустите его у себя. Через Microsoft Office Document Image Writer (он есть в каждой винде) можно распечатать и посмотреть результат на мониторе.

Пример:
Код:

import flash.display.BitmapData;
Stage.align="TL"
_root.createEmptyMovieClip("mc",2);
mc.lineStyle(1);
mc.lineTo(1000,1000)
mc.moveTo(1000,0)
mc.lineTo(0,1000)
mc._visible=false
_root.createEmptyMovieClip("printmc",3);
printmc.createEmptyMovieClip("printmcbmp",4);

var bmp:BitmapData=new BitmapData(mc._width,mc._height,true,0x00000000); //Кстати, если w*h мувика будет превышать рамки 3-4 Mpix, то он не создастся, хотя это тоже решается. просто вопрос сейчас не в этом.
bmp.draw(mc);
printmc.printmcbmp.attachBitmap(bmp,2,false,true);

option1=false; //умещать в лист. для примера поставьте true и посмотрите результат.

var my_pj:PrintJob = new PrintJob();
        if (my_pj.start()) {
                var pagesToPrint:Number = 0;
                var target=_root.printmc;
                var dx=0;
                var dy=0;
                var w =my_pj.pageWidth //paperWidth, paperHeight тоже не помогает
                var h=my_pj.pageHeight
                trace(my_pj.orientation)
                if (my_pj.orientation=="portrait") {
                        var movex=target.printmcbmp._height
                        target.printmcbmp._x=movex;
                        target.printmcbmp._rotation=90;
                }
                trace("option1 "+option1)
                if (option1) {
                        var ratio1=(h)/target._height
                        var ratio2=(w)/target._width
                        var minratio=ratio1<ratio2?ratio1:ratio2;
                        if (minratio<1) {
                                target._height*=minratio
                                target._width*=minratio
                        }
                } else {
                        if (target._height>h) {
                                var ratio=h/target._height
                                trace(ratio)
                                target._height*=ratio
                                target._width*=ratio
                        }
                }
                while (true) {
                        trace(target._width+"  "+target._height)
                        trace(w+"  "+h)
                        if (dy>=target._height) {break;}
                        var printArea=new Object();
                        printArea.xMin=dx
                        printArea.yMin=dy
                        printArea.xMax=(dx+w)
                        printArea.yMax=(dy+h)
                        //если сделать так то все ок для данного конкретного примера:
                        //printArea.xMax=(dx+w+500)
                        //printArea.yMax=(dy+h+500)
                        var options={printAsBitmap:true};
                        if (my_pj.addPage(target,printArea,options,1)) {
                                pagesToPrint++;
                        }
                        dx+=w;
                        if (dx>=target._width) {
                                dx=0;
                                dy+=h;
                        }
                }
                if (pagesToPrint > 0) {
                my_pj.send(); 
                }
        }
        delete my_pj;

Обратите внимание что если раскомментировать:
printArea.xMax=(dx+w+500)
printArea.yMax=(dy+h+500)
То проблема решается для данного примера, для произвольной печати (от 20x3000 до 3000x20) он не подходит. Ну и вообще по логике тут и без этого должно работать.

Вообщем если кто может сказать, в чем у меня ошибка и как заставить печатать страницу целиком.

Прошу прощения, что повторяю топик. Задал вопрос в другом разделе, не зная что там пост-модерация.


Часовой пояс GMT +4, время: 14:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.