Because of the constant attack by the wiki spam bots, accounts that are created and not used will be deleted. If you are a legitimate user, and your IP was blocked, please contact any active administrator - look at Special:RecentChanges and see who is busy fighting spam.

How do I create my own viewer?

From SWFTools
Revision as of 18:42, 13 April 2009 by Admin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Contents

Notice

This documentation is very old. Since swftools-0.2.1 and above, you can simply do

pdf2swf -bl -o document.swf document.pdf

to link viewer and preloader. However, the Steps below are still valid for jpeg2swf, and this documentation is also helpful to understand how to create your own viewer.

Step 1: Converting the documents

Suppose you have an arbitrary pdf file, "document.pdf". Call:

pdf2swf -o tmp.swf document.pdf

Now, tmp.swf is a Flash Movie generated from document.pdf. Movie means that there are no navigation elements whatsoever. Just frames which get displayed one by one, at a rate of approx. 1/2 frames/second. How to make document browsable is explained below. (You can do the same things described below with jpeg files. Simply use jpeg2swf -o tmp.swf pic1.jpeg pic2.jpeg ... and read on)

Step 2: Linking a viewer

Just take a viewer of your choice (e.g. SimpleViewer.swf or rfxview.swf) and put it in the same directory where you entered the commands above. Now call:

swfcombine -o flashfile.swf SimpleViewer.swf viewport=tmp.swf

Now, 'flashfile.swf' is "browsable", i.e. there are some buttons in it for turning pages.

Step 3: Linking a Preloader

Depending on the size of your PDFs/SWFs, you may want to have some kind of loading animation displayed while the browser is busy getting the actual document. Assuming you have some file like flashfile.swf above, you furthermore need the file PreLoader.swf and an arbirtary loading animation of your choice. To get started, try loading.swf, or just convert a "Loading" JPEG picture to swf:
jpeg2swf -o loading.swf picture.jpg

Now use

swfcombine -o flashfile.swf PreLoader.swf loader=loading.swf movie=flashfile.swf

Most loaders are smaller than the document they load. They usually need some centering so they appear in the middle of the page to be displayed, not in the upper left corner. Replace the above command with e.g.

swfcombine -o flashfile.swf PreLoader.swf -x 3000 -y 3000 loader=loading.swf movie=flashfile.swf
and try playing around with the values after -x and -y

Step 4: Correcting the size and framerate

Sometimes, the bounding box of the generated flash file is not correct. This happens because when linking a viewer or preloader to the SWFs, the new dimensions are those of the PreLoader and Viewer templates, and not those of your pdf or jpeg files. To fix this, use

swfcombine --dummy `swfdump -XY tmp.swf` flashfile.swf -o flashfile.swf

(tmp.swf is your 'original' swf, generated like above) You may also want to adjust the framerate of the movie to that of the preloader. (As the preloader is usually the only animated part of e.g. pdf viewers) Use:

swfcombine --dummy `swfdump -r loading.swf` flashfile.swf -o flashfile.swf

Step 5: Embedding the SWF into a html page

Usually, one wants to put the generated SWFs on his web page. To do so, you have to embed the SWF file into html. If you don't know how to embed SWFs into html pages, it's explained at [1]. Also, you can simply type

swfdump --html flashfile.swf

and insert the output into your html document

Appendix A: Creating your own Viewers

If you know about Flash, and you want to substitute SimpleViewer or rfxview from above with something more sophisticated, follow these rules:

* There has to be some rectangle (Movieclip, whatever... ) in your Viewer, named "viewport". (This name is used to reference the object when using swfcombine for merging it with the converted pdfs)
* Browsing buttons next to the rectangle (which turn pages in the shown pdf) should trigger some Actionsscript events, like  
viewport.nextFrame();

to set the frame in the to-be-replaced rectangle. (It will be replaced with a MovieClip, therefore a SetTarget is neccessary) It's important that the Target Name ist "viewport", not "/viewport", as the Movie will get inserted into a Movieclip.

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox