Pregunta Cómo aplicar una nueva línea en la generación de archivos docx usando DOCX4J


Por los tutoriales que he visto. Aprendí cómo agregar texto al generar un archivo docx. pero luego cada vez que agrego una línea de texto. Noté que siempre hay un espacio entre la primera línea de texto y la segunda línea de texto. como presionar la tecla Intro dos veces. Sé que la causa principal es que cada vez que agrego una línea de texto, uso un párrafo. y un párrafo comienza con un espacio después de otro párrafo.

Así es como agrego un texto

ObjectFactory factory;
factory = Context.getWmlObjectFactory();
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
P spc = factory.createP();
R rspc = factory.createR();
rspc.getContent().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("sample"));
spc.getContent().add(rspc);

java.io.InputStream is = new java.io.FileInputStream(file);
wordMLPackage.getMainDocumentPart().addObject(spc);

por lo que este código se ejecuta con éxito y produce el resultado correcto. pero cuando agrego otro párrafo o texto Quiero que esté justo debajo de la primera línea de texto. ¿Hay alguna manera de que pueda agregar una línea de texto simple sin usar un párrafo? gracias por adelantado

EDITAR: También he intentado agregar un simple org.docx4j.wml.Text como este

Text newtext = factory.createText();
newtext.setValue("sample new text");
wordMLPackage.getMainDocumentPart().addObject(newtext);

el programa se ejecutará, pero cuando abra el archivo docx generado, solo se le preguntará si hay algún problema con el contenido.


5
2018-04-16 05:56


origen


Respuestas:


El código de abajo se generará como línea por línea.

La clave está aquí agregue texto (1) -> párrafo1 y Br -> párrafo1 después de Texto (2) -> párrafo1

Br es un elemento como Text y P. usando esto podemos ir a una nueva línea.

ObjectFactory factory = Context.getWmlObjectFactory();
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage
        .createPackage();

P spc = factory.createP();
R rspc = factory.createR();

Text t1 = factory.createText();
t1.setValue("tset");
rspc.getContent().add(t1);
Br br = factory.createBr(); // this Br element is used break the current and go for next line
rspc.getContent().add(br);
Text t2 = factory.createText();
t2.setValue("\r\n tset2");
rspc.getContent().add(t2);

spc.getContent().add(rspc);

wordMLPackage.getMainDocumentPart().addObject(spc);

wordMLPackage.save(new java.io.File("helloworld.docx"));

SALIDA:

Tset

tset2


7
2018-04-16 06:53



Puedes usar ObjectFactory.createBr() para crear un nuevo final de línea.

    ObjectFactory factory = Context.getWmlObjectFactory();

    R run = factory.createR();

    Text text1 = factory.createText();
    text1.setValue("asd");
    run.getContent().add(text1);

    Br nl = factory.createBr();
    run.getContent().add(nl);

    Text text2 = factory.createText();
    text2.setValue("efg");
    run.getContent().add(text2);

    P para = factory.createP();
    para.getParagraphContent().add(run);

    WordprocessingMLPackage wordMLPackage =
            WordprocessingMLPackage.createPackage();
    wordMLPackage.getMainDocumentPart().addObject(para);

    wordMLPackage.getMainDocumentPart().addParagraphOfText("p1");
    wordMLPackage.getMainDocumentPart().addParagraphOfText("p2");

    wordMLPackage.save(new File("test.docx"));

3
2018-04-16 06:53



Preguntas populares