Mark (color) a string to write to the file

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

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

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

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

Author: Pacíficão, 2014-08-18

1 answers

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 ).

Although there is native support to RTF , support is quite limited. But the specification of the same is extremely simple and you can implement it on your own.

All you will need is to set desired colors:

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

Below an example that does exactly what it said:
download on 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 texts (i.e. not pure text) I suggest that just like Anthony said to use DOC or PDF libraries.

 3
Author: Mansueli, 2017-04-13 12:59:39