/ / Extraindo cabeçalho e parágrafos de arquivos doc e docx usando apache-poi - java, apache-poi

Extraindo cabeçalho e parágrafos de arquivos doc e docx usando apache-poi - java, apache-poi

Eu estou tentando ler documentos do Microsoft Word viaapache-poi e descobri que existem alguns métodos convenientes fornecidos para escanear documentos como getText (), getParagraphList () etc. Mas meu caso de uso é um pouco diferente e a maneira como queremos escanear qualquer documento é, ele deve dar nos eventos / informações como título, parágrafo, tabela na mesma sequência em que aparecem no documento. Isso me ajudará a preparar uma estrutura de documentos como

    <content>

<section>

<heading> ABC </heading>

<paragraph>xyz </paragraph>

<paragraph>scanning through APIs</paragraph>

<section>
.
.
.

</content>

A intenção principal é manter a relação entre título e parágrafos como no documento original. Não tenho certeza, mas pode algo como este trabalho para mim,

    Iterator<IBodyElement> itr = doc.getBodyElementsIterator();

while(itr.hasNext()) {

IBodyElement ele = itr.next();

System.out.println(ele.getElementType());

}

Consegui obter a lista de parágrafos, mas nãotítulo informações usando este código. Apenas para mencionar, eu estaria interessado em todos os cabeçalhos, eles podem ser explicitamente marcados como título usando estilo ou usando tamanho de fonte grande.

Respostas:

0 para resposta № 1

Cabeçalhos não são armazenados inline no principalDocumento, eles vivem em outro lugar, e é por isso que você não os está usando como elementos do corpo. Elementos do corpo são coisas como seções, parágrafos e tabelas, não cabeçalhos, então você tem que buscá-los você mesmo.

Se você olhar este código no Apache Tika, você verá um exemplo de como fazê-lo. Assumindo que você está reiterando sobre os elementos do corpo, e quer cabeçalhos / rodapés de parágrafos, você vai querer codificar algo como isto (baseado no código da Tika):

for(IBodyElement element : bodyElement.getBodyElements()) {
if(element instanceof XWPFParagraph) {
XWPFParagraph paragraph = (XWPFParagraph)element;
XWPFHeaderFooterPolicy headerFooterPolicy = null;

if (paragraph.getCTP().getPPr() != null) {
CTSectPr ctSectPr = paragraph.getCTP().getPPr().getSectPr();
if(ctSectPr != null) {
headerFooterPolicy = new XWPFHeaderFooterPolicy(document, ctSectPr);
// Handle Header
}
}
// Handle paragraph
if (headerFooterPolicy != null) {
// Handle footer
}
}
if(element instanceof XWPFTable) {
XWPFTable table = (XWPFTable)element;
// Handle table
}
if (element instanceof XWPFSDT){
XWPFSDT sdt = (XWPFSDT) element;
// Handle SDT
}
}