Работая над очередным проектом столкнулся с необходимостью отображения Flash-приложения на мобильных устройствах. Если на Android в ближайшем будущем поддержка Flash Player'a ожидается, то как быть с остальными устройствами?
Ответ пришел незамедлительно: "SVG + Javascript".
От HTML-кодеров я часто слышу резкие изречения сравнения Flash и SVG как технологий, в пользу второго. О том, что SVG не требует плагинов и ничем не уступает Flash'y. На нем можно рисовать векторные изображения, писать код на JavaScript, делать анимацию и многое другое.
Уже не первый год SVG ставят в конкуренты к Flash'y, хают одно и лелеют другое. И так как у меня появилась такая возможность поработать и с тем и с другим, я хочу сделать небольшой обзор.
Является ли SVG и Flash конкурентами?
Ответ: «Нет». Поясню.
На мой взгляд SVG не является конкурентной технологией. Flash имеет ряд возможностей, которых нету в первом. К такому мнению я пришел начав миграцию моего Flash-проекта на SVG. Всё-таки кросс-платформенность для flasher'ов немного непривычно.
Но, SVG - это очень круто, и это действительно перспективная технология со своими преимуществами. Эта мысль меня посетила по окончанию миграции, когда я увидел результат работы SVG-приложения.
Вообще выбор технологии, должен зависеть от задачи. Например у меня задача стояла, чтобы web-приложение одинаково работало и выглядело на домашних копьютерах и на мобильных устройствах. И теперь используя две технологии (вместо какой-то одной) моё приложение работает на всех устройствах.
Flash и SVG - это скорее друзья :)
Мне не составило особого труда переписать моё приложение с ActionScript на JavaScript, который используется в SVG. Не составило труда перенести статичную графику. Вообще всё прошло гладко.
Обе технологии дополняют друг друга. Недостатки Flash'a можно с легкостью заменить преимуществами SVG. И наоборот. Использование обеих технологий придаст вашему проекту уникальную гибкость.
Вот, что я вынес для себя:
Flash
SVG
Преимущества
Работа с камерой и микрофоном
Работа со звуком и видео
Загрузка и выгрузка файлов
Не требует дополнительных плагинов
Работает во всех мобильных устройствах
Недостатки
Требует плагин Adobe Flash Player
Не поддерживается большинством мобильных устройств
Не работает в Internet Explorer
Вывод
Не нужно привязываться к технологиям.
P.S.
Точно такая же ситуация и с HTML5... Но об этом в другой раз.
Недавно в одном из моих проектов при работе с различными схемами и диаграммами появилась необходимость экспорта данных в распространенный и удобочитаемый формат. Выбор автоматически пал на документы Microsoft Excel. Оказалось:
Начиная с 10-ой версии Flash Player можно собирать Excel-документы без участия сервера.
с чем хочу с вами поделится.
Немного теории.
В качестве Excel-документов я рассматриваю документы созданные в Microsoft Excel 2007 с расширением .xlsx. Именно с этой версии Microsoft открыла свой формат электронных таблиц. И теперь - это не файл с бинарными записями, а .zip-архив с набором .xml-документов.
Таким образом для создания .xlsx-документов нам необходимо записать данные в .xml-документы, затем собрать их в .zip-архив и в завершении заменить его расширение на ".xlsx".
Что мы имеем во Flash Player?
Полноценная работа с xml-разметкой (пакет классов flash.xml). Мы можем с легкостью записывать наши данные в .xml-документы.
Работа с бинарными данными (класс flash.utils.ByteArray), с помощью которой можно организовать сборку zip-архива.
Всё что нам необходимо, мы имеем. Поэтому перейдем к практике.
Запись данных в XML
Первым делом нужно разобраться с содержимом .xlsx-документа, а именно с .xml-документами. Для этого я в Microsoft Excel 2007 создал новый документ, сделал некоторые записи,
сохранил, поменял расширение на .zip и увидел такую вот структуру с каталогами и файлами.
Свои записи (Ivan, Ivanov, Ivanovich) я нашел в файле xl/sharedString.xml. Насколько я понял, это хранилище для текстовой информации.
Рассматривать подробно все возможности записи .xml-документов внутри .xlsx-файлов я не буду. Ознакомится с ними можно прочитав книгу "OpenXML. Кратко и доступно", автором которой является Воутер Ван Вугт.
Скажу только то, что благодаря такой открытой структуре .xlsx-документа, вы сможете с легкостью записывать не только текстовую информацию, но и изображения, диаграммы и все остальные объекты Microsoft Excel.
Сборка XML-документов в ZIP-архив
Теперь когда с записью в .xml-документы разобрались давайте попробуем их собрать в архив. Писать архиватор мы не будем, используем готовый. Меньше всего проблем у меня возникло с библиотекой FZip, так что используем её.
...
var zip:FZip = new FZip();
zip.addFile("_rels/.rels", Templates._RELS);
zip.addFile("docProps/app.xml", Templates.APP_XML);
zip.addFile("docProps/core.xml", Templates.CORE_XML);
zip.addFile("xl/_rels/workbook.xml.rels", Templates.WORKBOOK_XML_RELS);
zip.addFile("xl/theme/theme1.xml", Templates.THEME1);
zip.addFile("xl/worksheets/_rels/sheet1.xml.rels", Templates.SHEET1_XML_RELS);
zip.addFile("xl/worksheets/sheet1.xml", Templates.SHEET1_XML);
zip.addFile("xl/sharedStrings.xml", Templates.SHARED_STRING_XML);
zip.addFile("xl/styles.xml", Templates.STYLES_XML);
zip.addFile("xl/workbook.xml", Templates.WORKBOOK_XML);
zip.addFile("[content_types].xml", Templates.CONTENT_TYPES_XML);
//
var brr:ByteArray = new ByteArray();
zip.serialize(brr, true);
...
Сохранение на компьютер пользователя
Сохранить, собранный архив на локальный диск пользователя, можно при помощи класса flash.net.FileReference. Начиная с 10 версии FlashPlayer'a у этого класса появился метод save, который перед сохранением показывает диалоговое окно с выбор место сохранения. Вызываем его и в первом параметре пишем имя сохраняемого файла по умолчанию с расширением "xlsx".
...
var file:FileReference = new FileReference();file.save("excel_file.xlsx", brr);
...