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