If your input text is quite simple (I suppose it is because you want to color a String
). I believe that the easiest option and that can still open in word without problems is to use RTF (Rich Text Format).
Although there is the native stand to the RTF, the support is quite limited. However the specification of the same is extremely simple and you can implement 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 you said:
Download in 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 is not plain text) I suggest that as well as the Anthony said that uses libraries for DOC or PDF.
Java does not have native support for either DOC or PDF format, you should look for a library to solve your problem. Example: Apache POI for DOC and iText to PDF.
– Anthony Accioly