Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flash > ACPrintManager


Автор: AlDev 27.10.2007, 10:50
Оригинал находится тут:
http://anychart.com/blog/projects/acprintmanager/

Это собственно русский оригинал.

Итак, описание моей библиотечки для управления печатью flash-ек на html странице и некоторых хитрых фиксов некоторых насущных проблем, связанных с печатью flash-ек.

Представляю вам ACPringManager! ;-)

ACPrintManager is browser printing manager for flash content powered by AnyChart.Com team. Представляет собой небольшую JavaScript и ActionScript библиотеку.

Текущая версия: 0.1

Зачем это нужно

ACPrintManager позволяет вам:

    * Избавиться от проблем с печатью в Firefox (как правило, Firefox просто не отображает flash содержимое при печати html страницы)
    * Нормально печатать flash-ки с процентными размерами в Internet Explorer (при попытке напечатать flash содержимое процентного размера, Internet Explorer просто scale-ит контент flash-ки вне зависимости от того, какие значения стоят у stage.scale и stage.align)
    * Настроить вид flash-ки при печати из браузера (аналог html css media="print")

Как это работает

Проблему с печатью в Firefox мы решили используя возможность этого бразуера добавлять картинку напрямую на страницу, вместо указания ссылки на нее (см. http://en.wikipedia.org/wiki/Data:_URI_scheme#HTML

Проблему печати Flash-ки с процентными размерами в Internet Explorer мы решили используя уникальные события Internet Explorer-а: onbeforeprint и onafterprint. При событии onbeforeprint мы просто заменяем процентные размеры flash-ки на пиксельные, которые, в свою очередь, получаем от Flash-ки используя ExternalInterface.

Идея настройки вида flash-ки для печати заключается в подмене flash-ки картинкой в Firefox-е и перерисовкой flash-ки в InternetExplorer при событии onbeforeprint.

Download

http://anychart.com/tips_and_tricks/acprintmanager/ACPrintManager.zip

Как это использовать

Для использования требуется две простых вещи:

    * Добавить javascript библиотеку в страницу
    * Добавить установку содержимого для браузерной печати во Flash-ку

JavaScript библиотека лежит в папке src/js/ скачанного дистрибутива. Для ее добавления достаточно прописать

Код

<script src="src/ACPrintManager.js" type="text/javascript" language="javascript"></script>


В шапке страницы.

С ActionSctript библиотекой все немного сложнее. Библиотека лежит в папке src/as/ скачанного дистрибутива.

Для ее использования вы можете скопировать содержимое этой папки в папку вашего проекта, либо просто добавить путь к папке в classpath проекта:

См. Как добавить classpath для Flash 9 файла: http://livedocs.adobe.com/flash/9.0/UsingFlash/WS3e7c64e37a1d85e1e229110db38dec34-7fa2.html

Для Flex/FDT проекта В диалоге добавления Folder, нажмите на advanced и выставите путь к папке с исходниками.

После того, как ActionScript библиотека будет добавлена к проекту, остается произвести некоторые действия:
Step 1: импортировать и проинициализировать библиотеку

Например:
Код

import com.anychart.utils.PrintManager;
...
PrintManager.init(stage);

Warning: Инициализировать библиотеку надо ТОЛЬКО один раз!
Step 2: установить содержимое для печати

Например:
Код

//content for printing
var printableShape:Shape = new Shape();
printableShape.graphics.beginFill(0xAAAAAA, 1);
printableShape.graphics.drawRect(10, 10, 500, 500);
//save printable content
var data:BitmapData = new BitmapData(510, 510, false, 0xFFFFFFFF);
data.draw(printableShape);
PrintManager.setPrintableContent(data);


API Reference
ACPrintManager ActionScript API Reference лежит в папке api скачанного дистрибутива.

Samples
1. Flash 9 sample
Flash 9 sample находится в папке samples/flash9 скачанного дистрибутива
2. Flex 3 sample
Flex 3 sample находится в папке samples/flex скачанного дистрибутива

Integragion
How to use ACPrintManager with SWFObject

Просто поправьте код ваших swf-ок и добавьте в страницу импорт яваскрипта, как это было описано выше.

FAQ
Q: Когда надо вызывать setPrintableContent?
A: Всегда, когда требуется обновить содержимое, которое будет отображаться на напечатанной странице.

Q: С какой версией Flash Player-а работает это решение?
A: 9 и выше

Q: Как установить для печати текущее содержимое всей сцены?
A: Можно в главном классе (root) прописать следующий код:

var data:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0xFFFFFFFF);
data.draw(this);
PrintManager.setPrintableContent(data);

т.е. установить содержимое корневого спрайта для печати и выставить размеры, равные размерам сцены.

Q: Почему не работает печать в Firefox при использовании embed-а flash-а, генерируемого 9-м flash-ем?
A: 9-й Flash генерирует js файл AC_RunActiveContent.js, в котором embed-у не выставляется аттрибут id. Поправленный AC_RunActiveContent.js лежит в папке fixes/flash9/AC_RunActiveContent.js



© 2007 by AnyChart.Com ( http://anychart.com )

Добавлено @ 11:04
Сори, ссылки будут доступны через 30 минут.

Автор: AlDev 27.10.2007, 11:21
все ссылки теперь работают ;-)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)