ejemplo java ms-word docx4j

java - docx4j ejemplo



docx4j-eliminar el elemento wml P (1)

Estoy usando docx4j para trabajar con una plantilla de Microsoft Word. Quiero saber cómo eliminar u ocultar un elemento P en la plantilla. Puedo recorrer el código para obtener un elemento P específico, ahora necesito saber cómo eliminar u ocultar ese elemento P. ¿Alguien puede ayudar? Obtengo todos los elementos P usando el siguiente código:

private static List<Object> getAllElementFromObject(Object obj, Class<?> toSearch) { List<Object> result = new ArrayList<Object>(); if (obj instanceof JAXBElement) obj = ((JAXBElement<?>) obj).getValue(); if (obj.getClass().equals(toSearch)) result.add(obj); else if (obj instanceof ContentAccessor) { List<?> children = ((ContentAccessor) obj).getContent(); for (Object child : children) { result.addAll(getAllElementFromObject(child, toSearch)); } } return result; } private void replaceTextValue_P(WordprocessingMLPackage template ) throws Exception{ List<Object> texts = getAllElementFromObject(template.getMainDocumentPart(), P.class); // List<Object> pCon = new ArrayList<Object>(); for (Object text : texts) { P textElement = (P) text; template.getMainDocumentPart().getContent().remove(textElement); // DOES NOT WORK! writeDocxToStream(template, "C://Temp//Target.docx"); } } private void writeDocxToStream(WordprocessingMLPackage template, String target) throws IOException, Docx4JException { File f = new File(target); template.save(f); }


Si desea eliminar una P (es decir, una instancia de texto de P), simplemente elimínela de la lista de contenido, es decir,

template.getMainDocumentPart().getContent().remove(textElement )

Pero creo que te refieres a eliminar el contenido de texto.

Eso funciona de la misma manera, es decir:

p.getContent().remove(textElement )

Mirando a:

public void replaceElement(Object current, List insertions) { int index = content.indexOf(current); if (index > -1 ) { content.addAll(index+1, insertions); Object removed = content.remove(index); // sanity check if (!current.equals(removed)) { log.error("removed wrong object?"); } } else { // Not found log.error("Couldn''t find replacement target."); } }

ese método tal como está no funcionaría si la corriente de Objeto que está pasando solo coincide con algo envuelto en JAXBElement. Necesita una pequeña solución para abordar ese caso.