Просмотр полной версии : Подскажите пожалуйста, как это можно реализовать?
Есть такой проект - scribd.com (http://scribd.com), это онлайновый просмотрщик и хранилище документов любого формата. Сначала документ конвертится в pdf, потом с помощью swftools: pdf->swf. Эта свф-ка представляет собой movieclip с фреймами, в каждом из которых содержится одна страница из pdf. Потом этот мувик прогружается во вьювер и показывается в нескольких модах (book, scroll, slideshow)
Есть задача, реализовать режим scroll из этого вьювера (т.е режим как в adobe reader-е):
http://image-board.appspot.com/agtpbWFnZS1ib2FyZHINCxIFSW1hZ2UYqY4CDA
Но оказывается, в классе MovieClip невозможно вырезать отдельные фреймы, чтобы в проследствии раскидать их по контейнерам в скролл-панели своего вьювера. И как к этой задаче подойти, я не знаю. Была мысль делать копии этого MovieClip-a и при добавлении в нужный контейнер перематывать до нужного кадра, однако когда будет 500 кадров в мувике (и соответственно нужно будет 500 контейнеров для страниц и 500 копий этого мувика), при весе его в 5 метров - это по-моему плохая идея.
Кто что может подсказать для решения этой задачи? Заранее спасибо.
iflamberg
03.12.2009, 16:53
на экране-то умещаются только две-три страницы. Т.е. вам нужно всего две-три копии мувика.
А если делать функцию preview (tile-list с 16-25-36 кадрами) - как в scribd viewer? Как быть в этом случае, что посоветуете?
отрисуйте тумбы с каждого кадра в BitmapData
2Jewelz: А не подскажете код, чет не соображу (еще почти новичек во флеше), как фрейм из мувика перегнать в BitmapData посредством as3?
Вот сижу, и не вижу в классе MovieClip ни одного подходящего для этой задачи метода...
BitmapData 500 раз? Вам не кажется это плохой идеей?
Добавлено через 5 минут
А вообще:
mcForBitmap.gotoAndStop(499);
var jpgSource:BitmapData = new BitmapData (mcForBitmap.width, mcForBitmap.height);
jpgSource.draw(mcForBitmap);
iflamberg
03.12.2009, 17:37
нормально все будет. только не в цикле, чтобы комп завис, а на enterFrame по, скажем, 50 битмап за раз. Вообще, опять же можно отрисовывать битмапы по мере надобности.
Автор, вам нужна функция BitmapData.draw();
Все понял, спасибо большое. Попробую.
BitmapData 500 раз? Вам не кажется это плохой идеей?
вроде как человек хочет 16-25-36 страниц отобразить.. 500 сразу думаю никому не надо
+ не в полном размере делать, а именно тумбы, вобщем думаю так:
private function getFrame(index:uint):Bitmap
{
if ((index != 0) && (index <= mc.totalFrames))
{
mc.gotoAndStop(index);
var m:Matrix = new Matrix();
var size:Number = 0.2; // на сколько уменьшаем
m.scale(size, size);
var bmpd:BitmapData = new BitmapData(mc.width * size, mc.height * size);
bmpd.draw(mc, m, null, null, null, true);
return new Bitmap(bmpd, PixelSnapping.AUTO, true);
}else {
return null;
}
}
CrazyFlasher
03.12.2009, 17:49
с BitmapData у вас не прокатит сделать поиск и выделение по тексту ;-)
создавали что-то подобное (даже покруче scribda получилось :) )
iflamberg
03.12.2009, 17:54
ну, там, скорее всего уже потеряна возможность поиска на этапе "произвольный документ=>pdf=>swf"
CrazyFlasher
03.12.2009, 18:13
ну, там, скорее всего уже потеряна возможность поиска на этапе "произвольный документ=>pdf=>swf"
нет...swftools может делать статик тексты, чего вполне достаточно для создания фичи выделения и поиска.
Правда мы чутка меняли тему с конвертацией из пдф в свф, чтоб все страницы были в 1 фрейме как мувики, чтоб потом брать из source компонента нужные и т.д, т.к. bitmapdata не катит
2CrazyFlasher: а если не секрет, поделитесь решением, если не жалко?
UPD: Недочитал, понял как вы сделали, спасибо за намек.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.