[RESOLVIDO] HTML para TEXTO em JAVA com \n | resolvido por TulioACastro

Bom ando aqui a tentar fazer umas coisas por minha conta sem grandes pressões.

A minha próxima etapa é converter dados em HTML apenas no TEXTO, ou seja retirar as formatações etc.

Descobri este código, que funciona na perfeição, basta criar uma classe com este código que funciona na perfeição, é preciso ter um ficheiro com html na raiz do disco c:\ com o nome Teste e retorna direitinho o texto sem formatações HTML. O código java é este:

[code]import java.io.;
import javax.swing.text.html.
;
import javax.swing.text.html.parser.*;

public class Html2Text extends HTMLEditorKit.ParserCallback {
StringBuffer s;

// public Html2Text() {}

public void parse(Reader in) throws IOException {
    s = new StringBuffer();
    ParserDelegator delegator = new ParserDelegator();
    // the third parameter is TRUE to ignore charset directive
    delegator.parse(in, this, Boolean.TRUE);
}

public void handleText(char[] text, int pos) {
    s.append(text);
}

public String getText() {
    return s.toString();
}

public static void main (String[] args) throws FileNotFoundException, IOException {

        // the HTML to convert
        FileReader in = new FileReader("C:\Teste.html");
        Html2Text parser = new Html2Text();
        parser.parse(in);
        in.close();
        System.out.println(parser.getText());
}

}[/code]

Só tem um pequeno problema: o retorno é o texto perfeito mas sem \n, ou seja, o texto todo seguido sem parágrafos diferentes… Tentei descobrir onde era isto feito para alterar cada vez que chega ao fim de uma linha gravar um \n na variável que vai ter o texto, mas não consigo descobrir porque é feito algures numa biblioteca do Java. Alguém com experiência na área pode dar uma ajudinha.

Muito obrigado desde já pela ajuda.

[quote=JPN]Bom ando aqui a tentar fazer umas coisas por minha conta sem grandes pressões.

A minha próxima etapa é converter dados em HTML apenas no TEXTO, ou seja retirar as formatações etc.

Descobri este código, que funciona na perfeição, basta criar uma classe com este código que funciona na perfeição, é preciso ter um ficheiro com html na raiz do disco c:\ com o nome Teste e retorna direitinho o texto sem formatações HTML. O código java é este:

[code]import java.io.;
import javax.swing.text.html.
;
import javax.swing.text.html.parser.*;

public class Html2Text extends HTMLEditorKit.ParserCallback {
StringBuffer s;

// public Html2Text() {}

public void parse(Reader in) throws IOException {
    s = new StringBuffer();
    ParserDelegator delegator = new ParserDelegator();
    // the third parameter is TRUE to ignore charset directive
    delegator.parse(in, this, Boolean.TRUE);
}

public void handleText(char[] text, int pos) {
    s.append(text);
}

public String getText() {
    return s.toString();
}

public static void main (String[] args) throws FileNotFoundException, IOException {

        // the HTML to convert
        FileReader in = new FileReader("C:\Teste.html");
        Html2Text parser = new Html2Text();
        parser.parse(in);
        in.close();
        System.out.println(parser.getText());
}

}[/code]

Só tem um pequeno problema: o retorno é o texto perfeito mas sem \n, ou seja, o texto todo seguido sem parágrafos diferentes… Tentei descobrir onde era isto feito para alterar cada vez que chega ao fim de uma linha gravar um \n na variável que vai ter o texto, mas não consigo descobrir porque é feito algures numa biblioteca do Java. Alguém com experiência na área pode dar uma ajudinha.

Muito obrigado desde já pela ajuda.[/quote]

Para esse problema basta colocar um “\n” quando ele concatena a string no stringBuffer da classe, ou seja,
onde tem ali o método
public void handleText(char[] text, int pos) {
s.append(text);
}

coloque um outr append( “\n” ) depois do que ja tem assim ó:

public void handleText(char[] text, int pos) {
	s.append(text);
            s.append("\n");
}

[quote=TulioACastro][quote=JPN]Bom ando aqui a tentar fazer umas coisas por minha conta sem grandes pressões.

A minha próxima etapa é converter dados em HTML apenas no TEXTO, ou seja retirar as formatações etc.

Descobri este código, que funciona na perfeição, basta criar uma classe com este código que funciona na perfeição, é preciso ter um ficheiro com html na raiz do disco c:\ com o nome Teste e retorna direitinho o texto sem formatações HTML. O código java é este:

[code]import java.io.;
import javax.swing.text.html.
;
import javax.swing.text.html.parser.*;

public class Html2Text extends HTMLEditorKit.ParserCallback {
StringBuffer s;

// public Html2Text() {}

public void parse(Reader in) throws IOException {
    s = new StringBuffer();
    ParserDelegator delegator = new ParserDelegator();
    // the third parameter is TRUE to ignore charset directive
    delegator.parse(in, this, Boolean.TRUE);
}

public void handleText(char[] text, int pos) {
    s.append(text);
}

public String getText() {
    return s.toString();
}

public static void main (String[] args) throws FileNotFoundException, IOException {

        // the HTML to convert
        FileReader in = new FileReader("C:\Teste.html");
        Html2Text parser = new Html2Text();
        parser.parse(in);
        in.close();
        System.out.println(parser.getText());
}

}[/code]

Só tem um pequeno problema: o retorno é o texto perfeito mas sem \n, ou seja, o texto todo seguido sem parágrafos diferentes… Tentei descobrir onde era isto feito para alterar cada vez que chega ao fim de uma linha gravar um \n na variável que vai ter o texto, mas não consigo descobrir porque é feito algures numa biblioteca do Java. Alguém com experiência na área pode dar uma ajudinha.

Muito obrigado desde já pela ajuda.[/quote]

Para esse problema basta colocar um “\n” quando ele concatena a string no stringBuffer da classe, ou seja,
onde tem ali o método
public void handleText(char[] text, int pos) {
s.append(text);
}

coloque um outr append( “\n” ) depois do que ja tem assim ó:

public void handleText(char[] text, int pos) {
	s.append(text);
            s.append("\n");
}[/quote]

:oops: Que vergonha… Eu dei uma vista de olhos no main e nos métodos lá invocados e não reparei que essee fosse invocado nem reparei mais nele…

Muito muito muito obrigado, mais do que resolvido, OBRIGADO TulioACastro.