Foros del Web » Programación para mayores de 30 ;) » Java »

Llamar clase desde otra.

Estas en el tema de Llamar clase desde otra. en el foro de Java en Foros del Web. Tengo el siguiente codigo con un main que si lo ejecuto me saca el texto de un pdf: package poi; import java.io.File; import java.io.FileOutputStream; import ...
  #1 (permalink)  
Antiguo 26/12/2008, 16:17
 
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 352
Antigüedad: 15 años, 7 meses
Puntos: 5
Llamar clase desde otra.

Tengo el siguiente codigo con un main que si lo ejecuto me saca el texto de un pdf:


package poi;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;

import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.pdmodel.encryption.AccessPermission;
import org.pdfbox.pdmodel.encryption.StandardDecryptionMa terial;
import org.pdfbox.util.PDFText2HTML;
import org.pdfbox.util.PDFTextStripper;

public class LeerPDF
{
public static final String DEFAULT_ENCODING =
null;
//"ISO-8859-1";
//"ISO-8859-6"; //arabic
//"US-ASCII";
//"UTF-8";
//"UTF-16";
//"UTF-16BE";
//"UTF-16LE";


private static final String PASSWORD = "-password";
private static final String ENCODING = "-encoding";
private static final String CONSOLE = "-console";
private static final String START_PAGE = "-startPage";
private static final String END_PAGE = "-endPage";
private static final String SORT = "-sort";
private static final String HTML = "-html"; // jjb - added simple HTML output

/**
* private constructor.
*/
private LeerPDF()
{
//static class
}

/**
* Infamous main method.
*
* @param args Command line arguments, should be one and a reference to a file.
*
* @throws Exception If there is an error parsing the document.
*/
public static void main( String[] args ) throws Exception
{
boolean toConsole = false;
boolean toHTML = false;
boolean sort = false;
String password = "";
String encoding = DEFAULT_ENCODING;
String pdfFile = "C://prueba.pdf";
String textFile = null;
int startPage = 1;
int endPage = Integer.MAX_VALUE;
for( int i=0; i<args.length; i++ )
{
if( args[i].equals( PASSWORD ) )
{
i++;
if( i >= args.length )
{
usage();
}
password = args[i];
}
else if( args[i].equals( ENCODING ) )
{
i++;
if( i >= args.length )
{
usage();
}
encoding = args[i];
}
else if( args[i].equals( START_PAGE ) )
{
i++;
if( i >= args.length )
{
usage();
}
startPage = Integer.parseInt( args[i] );
}
else if( args[i].equals( HTML ) )
{
toHTML = true;
}
else if( args[i].equals( SORT ) )
{
sort = true;
}
else if( args[i].equals( END_PAGE ) )
{
i++;
if( i >= args.length )
{
usage();
}
endPage = Integer.parseInt( args[i] );
}
else if( args[i].equals( CONSOLE ) )
{
toConsole = true;
}
else
{
if( pdfFile == null )
{
pdfFile = args[i];
}
else
{
textFile = args[i];
}
}
}

if( pdfFile == null )
{
usage();
}
else
{

Writer output = null;
PDDocument document = null;
try
{
try
{
//basically try to load it from a url first and if the URL
//is not recognized then try to load it from the file system.
URL url = new URL( pdfFile );
document = PDDocument.load( url );
String fileName = url.getFile();
if( textFile == null && fileName.length() >4 )
{
File outputFile =
new File( fileName.substring( 0, fileName.length() -4 ) + ".txt" );
textFile = outputFile.getName();
}
}
catch( MalformedURLException e )
{
document = PDDocument.load( pdfFile );
if( textFile == null && pdfFile.length() >4 )
{
textFile = pdfFile.substring( 0, pdfFile.length() -4 ) + ".txt";
}
}

//document.print();
if( document.isEncrypted() )
{
StandardDecryptionMaterial sdm = new StandardDecryptionMaterial( password );
document.openProtection( sdm );
AccessPermission ap = document.getCurrentAccessPermission();

if( ! ap.canExtractContent() )
{
throw new IOException( "You do not have permission to extract text" );
}
}
if( toConsole )
{
output = new OutputStreamWriter( System.out );
}
else
{
if( encoding != null )
{
output = new OutputStreamWriter(
new FileOutputStream( textFile ), encoding );
}
else
{
//use default encoding
output = new OutputStreamWriter(
new FileOutputStream( textFile ) );
}
}

PDFTextStripper stripper = null;
if(toHTML)
{
stripper = new PDFText2HTML();
}
else
{
stripper = new PDFTextStripper();
}
stripper.setSortByPosition( sort );
stripper.setStartPage( startPage );
stripper.setEndPage( endPage );
stripper.writeText( document, output );
}
finally
{
if( output != null )
{
output.close();
}
if( document != null )
{
document.close();
}
}
}
}

/**
* This will print the usage requirements and exit.
*/
private static void usage()
{
System.err.println( "Usage: java org.pdfbox.ExtractText [OPTIONS] <PDF file> [Text File]\n" +
" -password <password> Password to decrypt document\n" +
" -encoding <output encoding> (ISO-8859-1,UTF-16BE,UTF-16LE,...)\n" +
" -console Send text to console instead of file\n" +
" -html Output in HTML format instead of raw text\n" +
" -sort Sort the text before writing\n" +
" -startPage <number> The first page to start extraction(1 based)\n" +
" -endPage <number> The last page to extract(inclusive)\n" +
" <PDF file> The PDF document to use\n" +
" [Text File] The file to write the text to\n"
);
System.exit( 1 );
}
}


La clase funciona perfectamente, pero yo necesito integrala en mi código. Osea mandarle yo el "String pdfFile = "C://prueba.pdf";" mandarle yo ese valor desde otra clase, pero no se como hacerlo ya que coge los arg de arriba en main y no se como hacerlo...

por favor me podéis indicar como debo hacer para que yo el mande a esta clase el string con la ruta del pdf que quiero extraer el texto.

Muchas gracias.
  #2 (permalink)  
Antiguo 26/12/2008, 16:54
 
Fecha de Ingreso: diciembre-2008
Mensajes: 71
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Llamar clase desde otra.

Hola lgarcia1977.

Yo te recomiendo de que el main tenga el menos codigo posible.

yo haria lo siguiente:

Todo el codigo que esta en el main lo pongas en otro metodo.

Cita:
public void settings(String pdfFile){
boolean toConsole = false;
boolean toHTML = false;
boolean sort = false;
String password = "";
String encoding = DEFAULT_ENCODING;
String pdfFile = "C://prueba.pdf";
String textFile = null;
int startPage = 1;
.
.
.

}
si miras al principio del metodo le estamos pasando como parametro la ubicacion del pdf.

ahora para invocarlo desde otra clase, yo ya utilizaria el main para ejecutarlo

Cita:
public class Corre{

public static void main(String args[]){

//Creamos nuestro objeto de tipo LeerPDF

LeerPDF leer = new LeerPDF();

//mandamos llamar el metodo settings pasandole como parametro la ubicacion del archivo

leer.settings("C:\\archivo.pdf");//este metodo invocara a los otros


}
}
siempre trata de que la clase que tenga el main solamente tenga el codigo que invoque a tus otras clases.

trata de utilizar metodos para que tengas una mejor estructura de tu programa.

espero que te sirva.
  #3 (permalink)  
Antiguo 26/12/2008, 18:13
 
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 352
Antigüedad: 15 años, 7 meses
Puntos: 5
Respuesta: Llamar clase desde otra.

No me sirve...
La clase la he cogido del paquete pfdBox...y es un main...


Tiene arriba los siguiente:

public static final String DEFAULT_ENCODING =
null;
//"ISO-8859-1";
//"ISO-8859-6"; //arabic
//"US-ASCII";
//"UTF-8";
//"UTF-16";
//"UTF-16BE";
//"UTF-16LE";


private static final String PASSWORD = "-password";
private static final String ENCODING = "-encoding";
private static final String CONSOLE = "-console";
private static final String START_PAGE = "-startPage";
private static final String END_PAGE = "-endPage";
private static final String SORT = "-sort";
private static final String HTML = "-html"; // jjb - added simple HTML output


Y entonces cuando arranca el main...carga eso como


String[] arg ...

Lo que quiero es como tu dices una clases sin main


que llame a un metodo que me haga la extraccion del pdf...

Lo que quiero es reconvertir el main en un metodo, pero como recibe como argumento arg que esta arriba no se como integrarlo todo para que me quede dentro el método los arg, y yo le pase a la nueva clase la ruta de mi pdf...

Lo he intentado lo que tu me has dicho y al copiar el contendio de main en un metodo me da errores porque no encuenta los arg que carga el main al comienzo...

Muchas gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:43.