Hvordan lese tekst fra SWF i Java

Som standard er Java stand til å arbeide med Flash SWF-filer. SWF-filer er Adobe Flash-filer som inneholder multimedia, vektorgrafikk og Actionscript. Imidlertid er en pakke med funksjoner tilgjengelig på nettet som utvider funksjonaliteten til Java og gir deg muligheten til å jobbe med Flash-filer. For eksempel kan det hjelpe deg å analysere SWF-fil og lese hele teksten. Du kan deretter bruke teksten i andre Java-funksjoner. Alt du trenger å gjøre er å laste ned kildefilene og link til dem i Java-program.

Bruksanvisning

1 Åpne nettleseren og gå til Softpedia å laste ned JavaSWF2 kildekoden.

2 Klikk på den blå "Last ned" knappen og lagre arkivet på harddisken.

3 Høyreklikk javaswf-CVS-SNAPSHOT-1.zip arkivere du nettopp lastet ned og velg Pakk ut her for å pakke ut innholdet i den samme mappen. En mappe med navnet javaswf er opprettet.

4 Lag en ny tekstfil hvor som helst på harddisken, name it ReadText.java og trykk "Enter".

5 Kopier com mappen funnet inne i javaswf \ bin-mappen i mappen som inneholder den nye Java-filen.

6 Åpne Java-filen i en tekst editor.

7 Sett disse linjene til å importere de nødvendige ressurser:

import

java.io.;
importere java.util.;
import com.anotherbigidea.flash.interfaces.;
import com.anotherbigidea.flash.writers.;
import com.anotherbigidea.flash.readers.;
import com.anotherbigidea.flash.structs.;

8 Sett inn denne koden for å lese teksten fra SWF-fil:

public class ExtractText strekker SWFTagTypesImpl
{

protected HashMap fontCodes = new HashMap();
public ExtractText( )
{
super( null );
}

public void tagDefineFontInfo (int fontId, String skriftnavn, int flagg, int [] koder)

throws IOException
{
fontCodes.put( new Integer(fontId), codes );
}
public SWFVectors tagDefineFont2( int id, int flags, String name, int numGlyphs,
int ascent, int descent, int leading,
int[] codes, int[] advances, Rect[] bounds,
int[] kernCodes1, int[] kernCodes2,
int[] kernAdjustments ) throws IOException
{
fontCodes.put( new Integer(id), (codes!=null) ? codes : new int[0] );
return null;
}
public void tagDefineTextField( int fieldId, String fieldName,
String initialText, Rect boundary, int flags,
AlphaColor textColor, int alignment, int fontId, int fontSize,
int charLimit, int leftMargin, int rightMargin, int indentation,
int lineSpacing )
throws IOException
{
if( initialText != null )
{
System.out.println( initialText );
}
}
public SWFText tagDefineText( int id, Rect bounds, Matrix matrix )
throws IOException
{
return new TextDumper();
}
public SWFText tagDefineText2( int id, Rect bounds, Matrix matrix ) throws IOException
{
return new TextDumper();
}
public class TextDumper implements SWFText
{
protected Integer fontId;
protected boolean firstY = true;
public void font( int fontId, int textHeight )
{
this.fontId = new Integer( fontId );
}
public void setY( int y )
{
if( firstY ) firstY = false;
else System.out.println();
}
public void text( int[] glyphIndices, int[] glyphAdvances )
{
int[] codes = (int[])fontCodes.get( fontId );
if( codes == null )
{
System.out.println( "\n**** COULD NOT FIND FONT INFO FOR TEXT ****\n" );
return;
}
char[] chars = new char[ glyphIndices.length ];
for( int i = 0; i < chars.length; i++ )
{
int index = glyphIndices[i];
if( index >= codes.length ) //System Font ?
{
chars[i] = (char)index;
}
else
{
chars[i] = (char)(codes[index]);
}
}
System.out.print( chars );
}
public void color( Color color ) {}
public void setX( int x ) {}
public void done()
{
System.out.println();
}
}
public static void main( String[] args ) throws IOException
{
FileInputStream in = new FileInputStream( args[0] );
ExtractText extractor = new ExtractText();
TagParser parser = new TagParser( extractor );
SWFReader reader = new SWFReader( parser, in );
reader.readFile();
in.close();
}

}

9 Lagre og lukk Java-filen.

10 Kompilere Java kilde, plasserer SWF-fil inne i samme mappe og kjøre Java-program. Den vil be om navnet på SWF-fil. Skriv inn det og trykk "Enter" for å lese teksten fra SWF.

Hint

  • Du kan legge til flere funksjoner til program for å bruke teksten.