PDA

Просмотр полной версии : Печать HTML или PDF используя FlexPrintJob


makanmel
14.11.2007, 21:51
Есть TextArea, в которое загружается HTML с помощью URLLoader. Нужно как-то это распечатать. Пробую с помощью FlexPrintJob и соответствующего хелпа, но печатается только одна страница причем со скроллбаром этого TextArea (см. вложение). В хелпе используется PrintDataGrid. Может можно в него как-то загрузить мой HTML?


private function loadBriefing() : void
{
var url : String = "sample.htm";
var urlLoader : URLLoader = new URLLoader();
var urlRequest : URLRequest = new URLRequest(url);
urlLoader.addEventListener(Event.COMPLETE, onComplete,false,0,true);
urlLoader.load(urlRequest);
}
private function onComplete(event:Event) : void
{
this.briefingText = new TextArea();
this.briefingText.htmlText = event.target.data;
this.addChild(briefingText);
this.briefingText.validateNow();
}
public function print():void
{
var printJob : FlexPrintJob = new FlexPrintJob();
if (printJob.start())
{
printJob.addObject(briefingText);
printJob.send();
}
}


Еще лучше было бы иметь возможность распечатывать PDF, доступный по URL. Я конечно могу его открыть в новом окне, но там еще нужно будет открывать диалог печати... А нужно что бы он сразу появился, или даже сразу пошла печать.

Кто что посоветует? На форуме решений не нашел.

makanmel
15.11.2007, 21:47
Up-Up

etc
15.11.2007, 23:14
Плюс за ап.

__i
16.11.2007, 16:18
Бей ручками текст на страницы пихай в отдельные текстфиелды. Другого варианта нету.

makanmel
16.11.2007, 21:45
Вариант с текстфилдами по размеру страницы я уже рассматривал, он мне показался очень сложным, так как надо не простой текст разбивать, а HTML, да еще и так, что бы текст заполнял каждую страницу до конца, а не обрывался посередине...

Сегодня я придумал и реализовал другой интересный вариант, может кому-то пригодится еще:

Перед печатью с помощью таймера увеличиваем высоту TextArea (сначала она равна 100%) до тех пор, пока не исчезнет вертикальная полоса прокрутки (при этом свойство TextArea.maxVerticalScrollPosition станет равным 0), и тогда запускаем печать. После печати устанавливаем высоту TextArea опять в 100%. При таком способе распечатывается весь текст на несколькихз страницах:


public function print() : void
{
if (briefingText.maxVerticalScrollPosition == 0)
{
var printJob : FlexPrintJob = new FlexPrintJob();
if (printJob.start())
{
printJob.addObject(briefingText);
printJob.send();
}
briefingText.percentHeight = 100;
briefingText.verticalScrollPolicy = "auto";
}
else
{
briefingText.verticalScrollPolicy = "off";
setTimeout(expandCanvas, 100);
}
}
private function expandCanvas() : void
{
briefingText.height += 500;
setTimeout(print, 100);
}