Как исправить ошибку «0 уровень отсутствует для abstractListDefinition 0» при использовании Emulator.getNumber () - PullRequest
0 голосов
/ 17 апреля 2019

Я использовал docx4j для чтения файла docx. И мне нужно прочитать символы формата номера абзаца. Я использую Emulator.getNumber () для обработки, но я получил эту ошибку. Как мне с этим бороться?

try {
     PPr pPr = ((P) p).getPPr();
     if (pPr != null && pPr.getNumPr() != null) {
         Emulator.ResultTriple triple = Emulator.getNumber(wordprocessingMLPackage, pPr);
         if (triple != null) {
              order = triple.getNumString();
         }
     }
 } catch (Exception e) {
     // throw error '0 level missing for abstractListDefinition 0'
     e.printStackTrace();
 }

Любая помощь будет оценена. Спасибо.

docx4j версия: 6.1.2

1 Ответ

0 голосов
/ 18 апреля 2019

html-вывод docx4j использует его так:

        // Numbering
        String numberText=null;
        String numId=null;
        String levelId=null;
        if (pPrDirect.getNumPr()!=null) {
            numId = pPrDirect.getNumPr().getNumId()==null ? null : pPrDirect.getNumPr().getNumId().getVal().toString(); 
            levelId = pPrDirect.getNumPr().getIlvl()==null ? null : pPrDirect.getNumPr().getIlvl().getVal().toString(); 
        }

        ResultTriple triple = org.docx4j.model.listnumbering.Emulator.getNumber(
                conversionContext.getWmlPackage(), pStyleVal, numId, levelId);   


        if (triple==null) {
            getLog().debug("computed number ResultTriple was null");
        } else {
            if (triple.getBullet() != null) {
                //numberText = (triple.getBullet() + " ");
                numberText = "\u2022  "; 
            } else if (triple.getNumString() == null) {
                getLog().error("computed NumString was null!");
                numberText = ("?");
            } else {
                numberText = (triple.getNumString() + " ");
            }
        }
        if (numberText!=null) {
            currentParent.appendChild(document.createTextNode(
                    numberText + " "));             
        }

XSL-FO выход:

            if (pPrDirect!=null && pPrDirect.getNumPr()!=null) {
                triple = org.docx4j.model.listnumbering.Emulator.getNumber(
                    conversionContext.getWmlPackage(), pStyleVal, 
                    pPrDirect.getNumPr().getNumId().getVal().toString(), 
                    pPrDirect.getNumPr().getIlvl().getVal().toString() ); 
            } else {
                // Get the effective values; since we already know this,
                // save the effort of doing this again in Emulator
                Ilvl ilvl = pPr.getNumPr().getIlvl();
                String ilvlString = ilvl == null ? "0" : ilvl.getVal().toString();
                triple = null; 
                if (pPr.getNumPr().getNumId()!=null) {
                    triple = org.docx4j.model.listnumbering.Emulator.getNumber(
                            conversionContext.getWmlPackage(), pStyleVal, 
                            pPr.getNumPr().getNumId().getVal().toString(), 
                            ilvlString );                   
                }
            }
...