Mark (colorize) a string to write to the file

2

My application searches for a few words in a file. When the program recognizes these words (strings), it should mark it. For example: changing the font color or changing the background color of the word.

Then I will write the same text, but with the font color of the different word. I will write in pdf or doc, whichever is easier to do.

I do not know any function that does this and if when writing the file I will be able to write in this detail.

I kept searching and found class StyleContext but I have no idea how it works.

    
asked by anonymous 18.08.2014 / 14:42

1 answer

2

If your input text is fairly simple (I suppose it's because you want to color a String ). I believe that the easiest option and that you can even open in word without problems is to use RTF ( Rich Text Format ).

While native support to RTF , support is quite limited. But the specification is extremely simple and you can deploy it on your own.

All you need to do is set the desired colors:

\cores    \ \cf1 = Preto #000000 \cf2 Vermelho #FF0000  \cf3 = Azul #3200FF 
{\colortbl;\red0\green0\blue0;\red255\green0\blue0;\red50\green0\blue255;}\n

Below is an example that does exactly what it says:
Download the gist

RTF.java

import java.io.FileNotFoundException;
import java.io.PrintWriter;


public class RTF {
    private StringBuilder texto;
    public String getTexto() {
        return texto.toString();
    }
    public void setTexto(String texto) {
        this.texto = criaRTF(texto);
    }
    public StringBuilder criaRTF(String text){
        StringBuilder arquivortf = new StringBuilder("{\rtf1\ansi\deff0\n");
                                    // \cf1 = Preto (cor padrao)      ;\cf2 = vermelho        ;\cf3 =  Azul
        arquivortf.append("{\colortbl;\red0\green0\blue0;\red255\green0\blue0;\red50\green0\blue255;}\n");
        arquivortf.append(text);
        arquivortf.append("\n}");
        return arquivortf;
    }
    public void colorirTexto(String palavra)
    {
        //Colore com a cor Azul i.e \cf3
        String palavraColorida = "{\cf3" + palavra + "}";
        int indice = texto.indexOf(palavra);
        while (indice != -1)
        {
            texto.replace(indice, indice + palavra.length(), palavraColorida);
            // vai ao fim da substituicao
            indice += palavraColorida.length();
            indice = texto.indexOf(palavra, indice);
        }
    }
    public void salvaRTF(String nomeArquivo){
        try {
            PrintWriter saida = new PrintWriter(nomeArquivo + ".rtf");
            saida.println(texto);
            saida.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}

TestaRTF.java

public class TestaRTF {
    public static void main(String[] args){
        String texto = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n" +
                        " Aenean commodo ligula eget dolor. Aenean massa. Cum\n"     +
                        " sociis natoque penatibus et magnis dis parturient montes,\n" + 
                        "nascetur ridiculus mus. Donec quam felis, ultricies nec,\n"   + 
                        "pellentesque eu, pretium quis, sem. Nulla consequat massa\n"  + 
                        " quis enim. Donec pede justo, fringilla vel, aliquet nec,";
        RTF rtf = new RTF();
        rtf.setTexto(texto);
        rtf.colorirTexto("quis");
        rtf.salvaRTF("arquivoColorido");
    }
}

If your input is more complex (ie not pure text), I suggest that just like Anthony said to use libraries for DOC or PDF.

    
18.08.2014 / 18:23