Задача: Распечатать произвольного размера мувик.
Проблема: собственно работает все, кроме правильного определения ширины и высоты страницы. В итоге печатается страница урезано справа и снизу.
Посмотрите пример и запустите его у себя. Через 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) он не подходит. Ну и вообще по логике тут и без этого должно работать.
Вообщем если кто может сказать, в чем у меня ошибка и как заставить печатать страницу целиком.
Прошу прощения, что повторяю топик. Задал вопрос в другом разделе, не зная что там пост-модерация.