4

Word 文書で docx4j を使用して、箇条書きの番号なしリストを作成したいと考えています。作業を行うはずの次のコードを見つけました。しかし、私が何をしようとしても、生成されたリストは番号付きリストです! Word 2010、ドイツ語版、および docx4j-2.8.1 を使用しています。

    wordMLPackage = WordprocessingMLPackage.createPackage();

    ObjectFactory factory = new org.docx4j.wml.ObjectFactory();
    P p = factory.createP();

    org.docx4j.wml.Text t = factory.createText();
    t.setValue(text);

    org.docx4j.wml.R run = factory.createR();
    run.getContent().add(t);

    p.getContent().add(run);

    org.docx4j.wml.PPr ppr = factory.createPPr();

    p.setPPr(ppr);

    // Create and add <w:numPr>
    NumPr numPr = factory.createPPrBaseNumPr();
    ppr.setNumPr(numPr);

    // The <w:ilvl> element
    Ilvl ilvlElement = factory.createPPrBaseNumPrIlvl();
    numPr.setIlvl(ilvlElement);
    ilvlElement.setVal(BigInteger.valueOf(0));

    // The <w:numId> element
    NumId numIdElement = factory.createPPrBaseNumPrNumId();
    numPr.setNumId(numIdElement);
    numIdElement.setVal(BigInteger.valueOf(1));

    wordMLPackage.getMainDocumentPart().addObject(p);

誰かが実際の順序付けられていない箇条書きリストを生成するのを手伝ってくれませんか?!

4

3 に答える 3

3

これがお役に立てば幸いです。

import org.docx4j.XmlUtils;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart;
import org.docx4j.wml.*;

import javax.xml.bind.JAXBException;
import java.io.File;
import java.math.BigInteger;


public class GenerateBulletedList {

private static final String BULLET_TEMPLATE ="<w:numbering xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">" +
        "<w:abstractNum w:abstractNumId=\"0\">" +
        "<w:nsid w:val=\"12D402B7\"/>" +
        "<w:multiLevelType w:val=\"hybridMultilevel\"/>" +
        "<w:tmpl w:val=\"AECAFC2E\"/>" +
        "<w:lvl w:ilvl=\"0\" w:tplc=\"04090001\">" +
        "<w:start w:val=\"1\"/>" +
        "<w:numFmt w:val=\"bullet\"/>" +
        "<w:lvlText w:val=\"\uF0B7\"/>" +
        "<w:lvlJc w:val=\"left\"/>" +
        "<w:pPr>" +
        "<w:ind w:left=\"360\" w:hanging=\"360\"/>" +
        "</w:pPr>" +
        "<w:rPr>" +
        "<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>" +
        "</w:rPr>" +
        "</w:lvl>" +
        "</w:abstractNum>"+
        "<w:num w:numId=\"1\">" +
        "<w:abstractNumId w:val=\"0\"/>" +
        "</w:num>" +
        "</w:numbering>";

public static void main(String[] args) throws Exception{

    WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
    createBulletedList(wordMLPackage);
    wordMLPackage.save(new File("Output.docx"));
}

private static void createBulletedList(WordprocessingMLPackage wordMLPackage)throws Exception{
    NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
    wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
    ndp.setJaxbElement((Numbering) XmlUtils.unmarshalString(BULLET_TEMPLATE));
    wordMLPackage.getMainDocumentPart().addObject(createParagraph("India"));
    wordMLPackage.getMainDocumentPart().addObject(createParagraph("United Kingdom"));
    wordMLPackage.getMainDocumentPart().addObject(createParagraph("France"));

}
private static P createParagraph(String country) throws JAXBException {

    ObjectFactory factory = new org.docx4j.wml.ObjectFactory();
    P p = factory.createP();
    String text =
            "<w:r xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">" +
                    " <w:rPr>" +
                    "<w:b/>" +
                    " <w:rFonts w:ascii=\"Arial\" w:cs=\"Arial\"/><w:sz w:val=\"16\"/>" +
                    " </w:rPr>" +
                    "<w:t>" + country + "</w:t>" +
                    "</w:r>";

    R r = (R) XmlUtils.unmarshalString(text);
    org.docx4j.wml.R run = factory.createR();
    run.getContent().add(r);

    p.getContent().add(run);
    org.docx4j.wml.PPr ppr = factory.createPPr();

    p.setPPr(ppr);
    // Create and add <w:numPr>
    PPrBase.NumPr numPr = factory.createPPrBaseNumPr();
    ppr.setNumPr(numPr);


    // The <w:numId> element
    PPrBase.NumPr.NumId numIdElement = factory.createPPrBaseNumPrNumId();
    numPr.setNumId(numIdElement);
    numIdElement.setVal(BigInteger.valueOf(1));
    return p;
}


}
于 2016-07-27T12:57:42.793 に答える
0

あなたが投稿したコードには、「リスト番号1、レベル0を使用してください」と書かれています。

明らかに、そのリストは番号付きリストです。

箇条書きリストの番号付け定義部分を見て、それを使用してください。

箇条書きリストがない場合は、追加する必要があります。サンプル docx を docx4j オンライン デモにアップロードして、適切なコンテンツを生成することができます。または、それを行う方法の例については、ListHelperを参照してください。

于 2013-06-17T08:37:57.023 に答える