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.