Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.02.2008, 13:33
rashrash вне форума Посмотреть профиль Отправить личное сообщение для rashrash Найти все сообщения от rashrash
  № 1  
Ответить с цитированием
rashrash

Регистрация: Feb 2008
Сообщений: 1
По умолчанию Печать с 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, время: 23:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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