Как извлечь цвет текста абзаца из MS Word, используя Apache Poi - PullRequest
1 голос
/ 15 ноября 2010

Я использую Apache POI, возможно ли прочитать текстовый цвет и цвет переднего плана из абзаца MS Word

Ответы [ 4 ]

5 голосов
/ 15 ноября 2010

Я получил решение

            HWPFDocument doc = new HWPFDocument(fs);
            WordExtractor we = new WordExtractor(doc);
            Range range = doc.getRange();       
            String[] paragraphs = we.getParagraphText();
            for (int i = 0; i < paragraphs.length; i++) {
                org.apache.poi.hwpf.usermodel.Paragraph pr = range.getParagraph(i);

                System.out.println(pr.getEndOffset());
                int j=0;
                while (true) {              
                 CharacterRun run = pr.getCharacterRun(j++);
                 System.out.println("-------------------------------");             
                 System.out.println("Color---"+ run.getColor());
                 System.out.println("getFontName---"+ run.getFontName());
                 System.out.println("getFontSize---"+ run.getFontSize());           

                if( run.getEndOffset()==pr.getEndOffset()){
                    break;
                }
                }
}
2 голосов
/ 05 июня 2011

Я нашел это в:

CharacterRun run = para.getCharacterRun(i)

i должно быть целым числом и должно увеличиваться так, чтобы код был следующим:

int c=0;
while (true) {
    CharacterRun run = para.getCharacterRun(c++);
    int x = run.getPicOffset();
    System.out.println("pic offset" + x);
    if (run.getEndOffset() == para.getEndOffset()) {
       break;
    }
}
0 голосов
/ 09 октября 2017

если вы работаете с docx (OOXML), вы можете взглянуть на это:

import java.io.*
import org.apache.poi.xwpf.usermodel.XWPFDocument


fun test(){
   try {
            val file = File("file.docx")
            val fis = FileInputStream(file.absolutePath)
            val document = XWPFDocument(fis)
            val paragraphs = document.paragraphs

            for (para in paragraphs) {
                println("-- ("+para.alignment+") " + para.text)

                para.runs.forEach { it ->
                    println(
                            "text:" + it.text() + " "
                                    + "(color:" + it.color
                                    + ",fontFamily:" + it.fontFamily
                                    + ")"

                    )
                }

            }

            fis.close()
        } catch (e: Exception) {
            e.printStackTrace()
        }
}
0 голосов
/ 22 апреля 2015
  if (paragraph != null)
            {
                int numberOfRuns = paragraph.NumCharacterRuns;
                for (int runIndex = 0; runIndex < numberOfRuns; runIndex++)
                {
                    CharacterRun run = paragraph.GetCharacterRun(runIndex);
                    string color = getColor24(run.GetIco24());

                }
  }

Функция GetColor24 для преобразования цвета в шестнадцатеричный формат для C #

     public static String getColor24(int argbValue)
    {
        if (argbValue == -1)
            return "";

        int bgrValue = argbValue & 0x00FFFFFF;
        int rgbValue = (bgrValue & 0x0000FF) << 16 | (bgrValue & 0x00FF00)
                | (bgrValue & 0xFF0000) >> 16;

        StringBuilder result = new StringBuilder("#");
        String hex = rgbValue.ToString("X");
        for (int i = hex.Length; i < 6; i++)
        {
            result.Append('0');
        }
        result.Append(hex);
        return result.ToString();
    }
...