que - ¿Cómo establecer el color de fondo(Color de página) para el documento de Word(.doc o.docx) en Java?
que es un archivo docx (2)
Actualización: XWPF es la forma más nueva de crear archivos de documentos de Word, pero solo se puede establecer el fondo mediante HWPF, que es para una versión de formato anterior (.doc)
Para * .doc (es decir, el componente HWPF de POI):
Resaltado de texto: mira en
setHighlighted()
Color de fondo:
Supongo que te refieres al fondo de un párrafo (AFAIK, Word también permite colorear toda la página, que es un asunto diferente)
Hay
setShading()
que le permite proporcionar un color de primer plano y de fondo (a través desetCvFore()
ysetCvBack()
deSHDAbstractType
) para un párrafo. IIRC, es el primer plano que le gustaría establecer para colorear su Párrafo. El fondo solo es relevante para sombreados que están compuestos por dos colores (alternos).La estructura de datos subyacente se llama
Shd80
([MS-DOC], 2.9.248). También haySHDOperand
([MS-DOC], 2.9.249) que refleja la funcionalidad de Word antes de Word97. [MS-DOC] es la especificación de formato de archivo de Word Binario que está disponible gratuitamente en MSDN.
Editar:
Aquí hay un código para ilustrar lo anterior:
try {
HWPFDocument document = [...]; // comes from somewhere
Range range = document.getRange();
// Background shading of a paragraph
ParagraphProperties pprops = new ParagraphProperties();
ShadingDescriptor shd = new ShadingDescriptor();
shd.setCvFore(Colorref.valueOfIco(0x07)); // yellow; ICO
shd.setIpat(0x0001); // solid background; IPAT
pprops.setShading(shd);
Paragraph p1 = range.insertBefore(pprops, StyleSheet.NIL_STYLE);
p1.insertBefore("shaded paragraph");
// Highlighting of individual characters
Paragraph p2 = range.insertBefore(new ParagraphProperties(), StyleSheet.NIL_STYLE);
CharacterRun cr = p2.insertBefore("highlighted text/r");
cr.setHighlighted((byte) 0x06); // red; ICO
document.write([...]); // document goes to somewhere
} catch (IOException e) {
e.printStackTrace();
}
En algunas bibliotecas, como http://poi.apache.org , pudimos crear un documento de Word con cualquier color de texto, pero para el fondo o resaltar el texto, no encontré ninguna solución.
¡Color de página por palabra en forma manual !:
Aquí está mi código principal para crear un documento de Word por poi.apache
// Blank Document
@SuppressWarnings("resource")
XWPFDocument document = new XWPFDocument();
// Write the Document in file system
FileOutputStream out = new FileOutputStream(new File(file_address));
// create Paragraph
XWPFParagraph paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.RIGHT);
XWPFRun run = paragraph.createRun();
run.setFontFamily(font_name);
run.setFontSize(font_size);
// This only set text color not background!
run.setColor(hex_color);
for (String s : text_array) {
run.setText(s);
run.addCarriageReturn();
}
document.write(out);
out.close();
Solo necesitamos agregar estas 3 líneas para establecer el color de fondo para documentos de Word por XWPF. Tenemos que establecer estas líneas después de declarar XWPFRun y su color de texto:
CTShd cTShd = run.getCTR().addNewRPr().addNewShd();
cTShd.setVal(STShd.CLEAR);
cTShd.setFill(hex_background_color);