Работа с документами word java

Время на прочтение
8 мин

Количество просмотров 15K

Для языка Java (как, впрочем, и для любого другого языка программирования) всё еще не придумали более простого и действенного способа генерации документов docx, чем библиотека Apache POI. В конце нулевых появился сей высокоуровнеый API, позволящий говорить с формируемым документом не на языке разметки XML, а с помощью удобных полей и выводов.

Судя по моим Google-запросам на протяжении более чем года сообщество пользователей этой библиотеки продержалось года этак до 2012, в то время как новые версии библиотеки всё еще появляются на главной странице проекта. Не на все вопросы, касающиеся формирования самого примитивного документа, есть ответы в документации или stackoverflow, не говоря уже о текстах на русском языке. Постараемся компенсировать этот недостаток данных для тех, кому это может понадобиться.

Основные классы API

XWPFDocument — целостное представление Word документа. В нём не только содержится xml-код, интерпретируемый редакторами (Word, LibreOffice), но также содержатся и методы для определения метаданных отображения — набора стилей, сносок и т.п. В этой статье поговорим о первом, так как работа с метаданными не так явно задокументирована, к тому же многие редакторы успешно справляются с отображением документа и без подсказок.

Итак, предположим, у вас на руках есть (ненужный) файл docx. Преобразуем его в файл zip (осторожно, обратное преобразование путем переименования zip -> docx может сделать файл недоступным для вашего редактора(!)), в получившемся архиве откроем папку word, а в ней — файл document.xml. Перед нами xml-представление word-файла, которое также можно было бы получить через Apache POI, с меньшими трудностями.

File file = new File("C:/username/document.docx");
FileInputStream fis = new FileInputStream(file.getAbsolutePath());
XWPFDocument document = new XWPFDocument(fis); // Вот и объект описанного нами класса
String documentLine = document.getDocument().toString(); 

Для того, чтобы поближе познакомиться с содержимым документа, придется вооружиться еще двумя классами API: XWPFParagraph и XWPFTable.

XWPFParagraph — как следует из названия, представляет собой параграф документа. Расположен он может быть как внутри XWPFDocument,

document.getParagraphs();
XWPFParagraph lastParagraph = document.createParagraph();

так и внутри таблицы (если точнее — внутри ячейки таблицы, вложенной в ряд таблицы, вложенного непосредственно в таблицу).

document.createTable().createRow().createCell().addParagraph();

Параграф предоставляет изрядный набор информации для вёрстки и размещения текста. Официальная документация на этот счёт достаточно красноречива: отступы слева и справа, сверху и снизу, в том числе и между строками, добавление гиперссылок и границ для параграфа.

XWPFTable — класс, олицетворяющий таблицу. Также как и в XWPFParagraph, XWPFTable можно добавлять к самому документу и к ячейке таблицы (создавая, тем самым, таблицу внутри таблицы). Семантика в таком случае чуточку усложняется.

XWPFTable table = document.createTable(); //Здесь всё просто, создаем таблицу в документе и работаем с ней.
XWPFCell cell = table.createRow().createCell();//Добавим к таблице ряд, к ряду - ячейку, и используем её.
XWPFTable innerTable = new XWPFTable(cell.getCTTc().addNewTbl(), cell, 2, 2); // Воспользуемся конструктором для добавления таблицы - возьмем cell и её внутренние свойства, а так же зададим число рядов и колонок вложенной таблицы
cell.insertTable(cell.getTables().size(), innerTable);

XWPFRun — набор данных о выводе текста внутри параграфа. Находится может только внутри параграфа, создается через вызов метода параграфа-родителя:

paragraph.createRun();

Из нескольких «ранов», как я предпочитаю их называть, и состоит целый параграф текста в Word. Каждый «ран» имеет свою настройку шрифта, его цвета и размера, а также стилизации. Через добавление различных «ранов», подчиняющихся разметке параграфа, можно выводить тексты с совершенно разной стилизацией.

Как становится видно из обзора классов, перенос, скажем, css-стиля в документ будет связан с дополнительной сложностью: часть свойств необходимо будет применить к параграфу docx, часть — к объекту класса XWPFRun.

Итак, библиотека легла в External Libraries/jar лежит под рукой, пора творить.

Создадим документ, добавим таблицу 2х2 и параграф.

XWPFDocument document = new XWPFDocument();
XWPFTable table = document.createTable(2, 2);
XWPFParagraph paragraph = document.createParagraph();
fillTable(table);
fillParagraph(paragraph);

Заполним параграф, добавив ран для вывода текста. После перевода строки стилизация параграфа будет потеряна, и в Word новый параграф будет выведен без красной строки.

void fillParagraph(XWPFParagraph paragraph) {
  paragraph.setIndent(20);
  XWPFRun run = paragraph.createRun();
  run.setFontSize(12);
  run.setFontFamily("Times New Roman");
  run.setText("My text");
  run.addBreak();
  run.setText("New line");
}

Теперь займёмся заполнением таблицы. Мы можем обращаться не только к уже созданным элементам, но и вызвать у сформированной таблицы метод для добавления рядов или колонок.

void fillTable(XWPFTable table) {
XWPFRow firstRow = table.getRows().get(0);
XWPFRow secondRow = table.getRows().get(1);
XWPFRow thirdRow = table.createRow();
fillRow(firstRow);
}

Опускаемся глубже, на уровень ряда таблицы. Именно в таком порядке предстаёт разбор таблицы в Apache POI — сначала ряды, потом клетки. Напрямую из таблицы можно получить лишь количество колонок в таблице:

table.getColBandSize();

Итак, ряд.

void fillRow(XWPFRow row) {
   List<XWPFTableCell> cellsList = row.getCells();
   cellsList.forEach(cell -> fillParagraph(cell.createParagraph()));
}

Оказавшись в ячейке двигаться глубже уже некуда, поэтому можно снова вызвать наш дуболомный метод по заполнению параграфа, предварительно создав его в таблице.

Итак, можно легко уловить суть структуры документа в Word: вкладывай одно в другое и предоставляй доступ (в том числе и к созданию новых экземпляров). К сожалению, далеко не всегда есть возможность получить последний элемент во вложенной коллекции. Чаще всего приходится пользоваться такими вот ухищрениями:

XWPFRun lastRunOfParagraph = paragraph.getRuns(paragraph.getRuns().size() - 1);

Хорошо, с содержимым таблицы разобрались. Что если нам нужно явно уточнить ширину таблицы, а не оставлять её для волной интерпретации редактора?

Для некоторых на первый взгляд числовых значений, например, ширины таблицы, в Apache POI существуют целые классы.

CTTblWidth widthRepr = table.getCTTbl().getTblPr().addNewTblW();
widthRepr.setType(STTblWidth.DXA);
widthRepr.setW(BigInteger.valueOf(4000));

С помощью типа укажем, какая именно ширина нам нужна: auto, pct или dxa. В первом случае таблицы займёт всю предоставленную ей ширину, во втором — процент от всей ширины, указанный позже методом setW. В нашем же случае вмешиватеся специальная единица измерения — dxa, равная 1/20 точки.

Классы, подобные CTTblWidth, используются повсеместно: для определения ширины страницы (PgSize), ширины ячейки и др.

Единцы измерения в Apache POI

В хорошем документе всё выверенно и расчерчено идеально, вплоть до самого пикселя. Возможно, в теории можно сделать всё средствами Apache POI и без углубления в тему единиц измерения, но лучше уделить им внимание сразу, чтобы избежать недопониманий в духе «почему это схлопнулось» и «когда переместил картинку в word на один сантиметр».

О поддержке сантиметров и остальной метрической системы тут остается только мечтать. Это резонно (каждый шрифт уникален, у каждого редактора своя специфика), но дико неудобно. Придется прибегнуть ко множеству конвертаций, если вы хотите задавать отступы (ведь именно в сантиметрах мы привыкли видеть их в word) в сантиметрах. Итак, указав тип измерения dxa для некоторой ширины, как описно в параграфе выше, мы получаем в распоряжение некоторое точное значение, но абсолютно не представляем как им воспользоваться. Для перевода в сантиметры на stackoverflow есть формула. Для всего остального существует класс Units. В нем определены как методы для перевода единиц измерения, так и сами соотношения между значениями.

Запись готового документа

Для записи в конечный файл есть удобный метод XWPFDocument — write. На вход принимается поток, в который пойдёт запись.

document.write(new FileOutputStream(new File("/path/to/file.docx")));

Если готовый документ нужно куда-то передать можно подать в качестве аргумента не File-, а ByteArrayOutputStream.

Информация об элементе отображения в формате xml

Имея документ, отображающийся корректно в определенном редакторе, полезно было бы узнать как именно представлен необходимый параграф или другой элемент. Для этого определенны специальные методы, возвращающие объекты классов пакета org.openxmlformats.schemas.wordprocessingml.x2006.main. Из названия (wordprocessingml) видно, что данный набор классов используется только для работы с документами word. Например, для xlsx документов есть пакет spreadsheetml, некоторые классы которого очень и очень похожи на классы wordprocessingml, поэтому конвертация между форматами достаточно затруднена.

paragraph.getCTP();
table.getCTTbl();

Так, пустой параграф будет иметь скромное представление

<xml-fragment/>

Пустая таблица покажет больше интересного.

<xml-fragment xmlns:main="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <main:tblPr>
    <main:tblW main:w="0" main:type="auto"/>
    <main:tblBorders>
      <main:top main:val="single"/>
      <main:left main:val="single"/>
      <main:bottom main:val="single"/>
      <main:right main:val="single"/>
      <main:insideH main:val="single"/>
      <main:insideV main:val="single"/>
    </main:tblBorders>
  </main:tblPr>
  <main:tr>
    <main:tc>
      <main:p/>
    </main:tc>
    <main:tc>
      <main:p/>
    </main:tc>
  </main:tr>
  <main:tr>
    <main:tc>
      <main:p/>
    </main:tc>
    <main:tc>
      <main:p/>
    </main:tc>
  </main:tr>
  <main:tr>
    <main:tc>
      <main:p/>
    </main:tc>
    <main:tc>
      <main:p/>
    </main:tc>
  </main:tr>
</xml-fragment>

Что здесь интересного? Свойства tblPr — всевозможные свойства таблицы. Внутри уже описанная ширина таблицы (установлена 0, но свойство «auto» все равно выведет таблицу в приемлимой, автоматической ширине). Также tblBorders — набор информации о границах таблицы. Далее идёт явно выраженное представление внутренностей таблицы. tr — ряд таблицы, внутри вложенны tc. Внутри tc оказался бы набор вложенный параграфов, если бы мы добавили хотя бы один.
Попробуем пополнить параграф информацией и посмотреть что из этого получится.

XWPFParagraph xwpfParagraph = document.getParagraphs().get(0);
        xwpfParagraph.setFirstLineIndent(10);
        XWPFRun run = xwpfParagraph.createRun();
        run.setFontFamily("Times New Roman");
        run.setText("New text");

Получаем:

<xml-fragment xmlns:main="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <main:pPr>
    <main:ind main:firstLine="10"/>
  </main:pPr>
  <main:r>
    <main:rPr>
      <main:rFonts main:ascii="Times New Roman" main:hAnsi="Times New Roman" main:cs="Times New Roman" main:eastAsia="Times New Roman"/>
    </main:rPr>
    <main:t>New text</main:t>
  </main:r>
</xml-fragment>

Здесь ситуация ровно такая же: объект с мета-информацией (в него добавлена информация об отступе красной строки, который мы вложили в коде), а так же само содержимое: там размещается список «ранов». В первый и единственный мы добавили текст и информацию о шрифте. Эта информация также разделилась внутри «рана» — информация о шрифте попала в rPr, сам текст — в элемент t.

Вместо вывода

Apache POI предоставляет удобный, и, что не менее важно, бесплатный API для работы с документами. В нем непросто добиться единого отображения во всех редакторах (Office Online и LibreOffice обязательно будут выглядеть иначе), есть множество неудобств с единицами измерения, а так же непонятно где и какие свойства в элементах должны находиться. Тем не менее, работа с этими свойствами подчинена логике, а возможность подглядеть в xml не нарушая эту логику делает разработку гораздо более удобной.

package ua.com.prologistic;

import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;

import org.apache.poi.xwpf.usermodel.ParagraphAlignment;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.apache.poi.xwpf.usermodel.XWPFParagraph;

import org.apache.poi.xwpf.usermodel.XWPFRun;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;

import java.io.FileOutputStream;

public class WordWorker {

    public static void main(String[] args) {

        try {

            // создаем модель docx документа,

            // к которой будем прикручивать наполнение (колонтитулы, текст)

            XWPFDocument docxModel = new XWPFDocument();

            CTSectPr ctSectPr = docxModel.getDocument().getBody().addNewSectPr();

            // получаем экземпляр XWPFHeaderFooterPolicy для работы с колонтитулами

            XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(docxModel, ctSectPr);

            // создаем верхний колонтитул Word файла

            CTP ctpHeaderModel = createHeaderModel(

            «Верхний колонтитул — создано с помощью Apache POI на Java :)»

            );

            // устанавливаем сформированный верхний

            // колонтитул в модель документа Word

            XWPFParagraph headerParagraph = new XWPFParagraph(ctpHeaderModel, docxModel);

            headerFooterPolicy.createHeader(

                    XWPFHeaderFooterPolicy.DEFAULT,

                    new XWPFParagraph[]{headerParagraph}

            );

            // создаем нижний колонтитул docx файла

            CTP ctpFooterModel = createFooterModel(«Просто нижний колонтитул»);

            // устанавливаем сформированый нижний

            // колонтитул в модель документа Word

            XWPFParagraph footerParagraph = new XWPFParagraph(ctpFooterModel, docxModel);

            headerFooterPolicy.createFooter(

                    XWPFHeaderFooterPolicy.DEFAULT,

                    new XWPFParagraph[]{footerParagraph}

            );

            // создаем обычный параграф, который будет расположен слева,

            // будет синим курсивом со шрифтом 25 размера

            XWPFParagraph bodyParagraph = docxModel.createParagraph();

            bodyParagraph.setAlignment(ParagraphAlignment.RIGHT);

            XWPFRun paragraphConfig = bodyParagraph.createRun();

            paragraphConfig.setItalic(true);

            paragraphConfig.setFontSize(25);

            // HEX цвет без решетки #

            paragraphConfig.setColor(«06357a»);

            paragraphConfig.setText(

            «Prologistic.com.ua — новые статьи по Java и Android каждую неделю. Подписывайтесь!»

            );

            // сохраняем модель docx документа в файл

            FileOutputStream outputStream = new FileOutputStream(«F:/Apache POI Word Test.docx»);

            docxModel.write(outputStream);

            outputStream.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

        System.out.println(«Успешно записан в файл»);

    }

    private static CTP createFooterModel(String footerContent) {

        // создаем футер или нижний колонтитул

        CTP ctpFooterModel = CTP.Factory.newInstance();

        CTR ctrFooterModel = ctpFooterModel.addNewR();

        CTText cttFooter = ctrFooterModel.addNewT();

        cttFooter.setStringValue(footerContent);

        return ctpFooterModel;

    }

    private static CTP createHeaderModel(String headerContent) {

        // создаем хедер или верхний колонтитул

        CTP ctpHeaderModel = CTP.Factory.newInstance();

        CTR ctrHeaderModel = ctpHeaderModel.addNewR();

        CTText cttHeader = ctrHeaderModel.addNewT();

        cttHeader.setStringValue(headerContent);

        return ctpHeaderModel;

    }

}

Apache POI Word – Обзор

Часто для создания справочных документов в формате файла Microsoft Word требуется программное приложение. Иногда даже ожидается, что приложение получит файлы Word в качестве входных данных.

Любой Java-программист, который хочет создавать файлы MS-Office в качестве выходных данных, должен использовать для этого предопределенный API только для чтения.

Что такое Apache POI?

Apache POI – это популярный API, который позволяет программистам создавать, изменять и отображать файлы MS-Office с помощью программ на Java. Это библиотека с открытым исходным кодом, разработанная и распространяемая Apache Software Foundation для разработки или изменения файлов MS-Office с использованием программы Java. Он содержит классы и методы для декодирования введенных пользователем данных или файла в документы MS-Office.

Компоненты Apache POI

Apache POI содержит классы и методы для работы со всеми составными документами OLE2 MS-Office. Список компонентов этого API приведен ниже –

  • POIFS (Файловая система реализации плохой обфускации) – этот компонент является основным фактором всех других элементов POI. Он используется для явного чтения разных файлов.

  • HSSF (ужасный формат электронной таблицы) – используется для чтения и записи в формате .xls файлов MS-Excel.

  • XSSF (XML SpreadSheet Format) – используется для формата файлов .xlsx в MS-Excel.

  • HPSF (формат набора ужасных свойств) – используется для извлечения наборов свойств из файлов MS-Office.

  • HWPF (формат ужасного текстового процессора) – используется для чтения и записи файлов расширений .doc MS-Word.

  • XWPF (XML-формат текстового процессора) – используется для чтения и записи файлов расширения .docx MS-Word.

  • HSLF (ужасный формат макета слайда) – используется для чтения, создания и редактирования презентаций PowerPoint.

  • HDGF (формат Horrible DiaGram) – содержит классы и методы для двоичных файлов MS-Visio.

  • HPBF (формат Horrible PuBlisher) – используется для чтения и записи файлов MS-Publisher.

POIFS (Файловая система реализации плохой обфускации) – этот компонент является основным фактором всех других элементов POI. Он используется для явного чтения разных файлов.

HSSF (ужасный формат электронной таблицы) – используется для чтения и записи в формате .xls файлов MS-Excel.

XSSF (XML SpreadSheet Format) – используется для формата файлов .xlsx в MS-Excel.

HPSF (формат набора ужасных свойств) – используется для извлечения наборов свойств из файлов MS-Office.

HWPF (формат ужасного текстового процессора) – используется для чтения и записи файлов расширений .doc MS-Word.

XWPF (XML-формат текстового процессора) – используется для чтения и записи файлов расширения .docx MS-Word.

HSLF (ужасный формат макета слайда) – используется для чтения, создания и редактирования презентаций PowerPoint.

HDGF (формат Horrible DiaGram) – содержит классы и методы для двоичных файлов MS-Visio.

HPBF (формат Horrible PuBlisher) – используется для чтения и записи файлов MS-Publisher.

Этот учебник проведет вас через процесс работы с файлами MS-Word с использованием Java. Поэтому обсуждение ограничивается компонентами HWPF и XWPF.

Примечание. Старые версии двоичных файлов формата поддержки POI, такие как DOC, XLS, PPT, ETC. ВЕРСИЯ 3.5 ​​ВПЕРЕД, POI ПОДДЕРЖИВАЕТ ФОРМАТЫ OOXML-ФАЙЛОВ MS-OFFICE ТАКИМИ КАК DOCX, XLSX, PPTX, ETC.

Apache POI Word – Установка

В этой главе рассказывается о настройке Apache POI в системах на базе Windows и Linux. Apache POI можно легко установить и интегрировать в текущую среду Java, выполнив несколько простых шагов без каких-либо сложных процедур настройки. Администрация пользователя требуется при установке.

Системные Требования

JDK Java SE 2 JDK 1.5 или выше
объем памяти 1 ГБ ОЗУ (рекомендуется)
Дисковое пространство Нет минимальных требований
Версия операционной системы Windows XP или выше, Linux

Давайте теперь перейдем к этапам установки Apache POI.

Шаг 1. Проверьте вашу установку Java

Прежде всего, вам необходимо установить Java Software Development Kit (SDK) в вашей системе. Чтобы убедиться в этом, выполните любую из двух команд, упомянутых ниже, в зависимости от платформы, на которой вы работаете.

Если установка Java была выполнена правильно, то на ней отобразится текущая версия и спецификация вашей установки Java. Пример вывода приведен в следующей таблице:

Платформа команда Пример вывода
Windows

Откройте командную консоль и введите –

> Java-версия

Java версия “1.7.0_60”

Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19)

64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 24.60-b09, смешанный режим)

Linux

Откройте командный терминал и введите –

$ java – версия

Java-версия “1.7.0_25”

Открытая среда выполнения JDK (rhel-2.3.10.4.el6_4-x86_64)

Откройте виртуальную машину 64-разрядного сервера JDK (сборка 23.7-b01, смешанный режим)

Откройте командную консоль и введите –

> Java-версия

Java версия “1.7.0_60”

Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19)

64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 24.60-b09, смешанный режим)

Откройте командный терминал и введите –

$ java – версия

Java-версия “1.7.0_25”

Открытая среда выполнения JDK (rhel-2.3.10.4.el6_4-x86_64)

Откройте виртуальную машину 64-разрядного сервера JDK (сборка 23.7-b01, смешанный режим)

  • Мы предполагаем, что читатели этого руководства установили Java SDK версии 1.7.0_60 в своей системе.

  • Если у вас нет Java SDK, загрузите его текущую версию с https://www.oracle.com/technetwork/java/javase/downloads/index.html и установите его.

Мы предполагаем, что читатели этого руководства установили Java SDK версии 1.7.0_60 в своей системе.

Если у вас нет Java SDK, загрузите его текущую версию с https://www.oracle.com/technetwork/java/javase/downloads/index.html и установите его.

Шаг 2. Установите среду Java

Установите переменную среды JAVA_HOME, чтобы она указывала на местоположение базовой директории, где установлена ​​Java на вашем компьютере. Например,

Платформа Описание
Windows Установите JAVA_HOME в C: ProgramFiles java jdk1.7.0_60
Linux Экспорт JAVA_HOME = / usr / local / java-current

Добавьте полный путь расположения компилятора Java к системному пути.

Платформа Описание
Windows Добавьте строку «C: Program Files Java jdk1.7.0_60 bin» в конец системной переменной PATH.
Linux Экспорт PATH = $ PATH: $ JAVA_HOME / bin /

Выполните команду java – version из командной строки, как описано выше.

Шаг 3: Установите Apache POI Library

Загрузите последнюю версию Apache POI по адресу https://poi.apache.org/download.html и разархивируйте его содержимое в папку, из которой необходимые библиотеки могут быть связаны с вашей программой Java. Предположим, что файлы собраны в папке на диске C.

На следующих рисунках показаны каталоги и файловая структура внутри загруженной папки:

Jar Hierarchy1

Jar Hierarchy2

Добавьте полный путь к пяти банкам, как показано на изображении выше, к CLASSPATH.

Платформа Описание
Windows

Добавьте следующие строки в конец пользовательской переменной CLASSPATH –

«C: пои-3,9 пои-3.9-20121203.jar;»

«C: пои-3,9 пои-OOXML-3.9-20121203.jar;»

«C: пои-3,9 пои-OOXML-схемы-3.9-20121203.jar;»

«C: пои-3,9 OOXML Пб dom4j-1.6.1.jar;»

«C:. Пои-3,9 OOXML Пб XMLBeans-2.3.0.jar;»;

Linux

Экспортировать CLASSPATH = $ CLASSPATH:

/usr/share/poi-3.9/poi-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-schemas-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-3.9-20121203.tar:

/usr/share/poi-3.9/ooxml-lib/dom4j-1.6.1.tar:

/usr/share/poi-3.9/ooxml-lib/xmlbeans-2.3.0.tar

Добавьте следующие строки в конец пользовательской переменной CLASSPATH –

«C: пои-3,9 пои-3.9-20121203.jar;»

«C: пои-3,9 пои-OOXML-3.9-20121203.jar;»

«C: пои-3,9 пои-OOXML-схемы-3.9-20121203.jar;»

«C: пои-3,9 OOXML Пб dom4j-1.6.1.jar;»

«C:. Пои-3,9 OOXML Пб XMLBeans-2.3.0.jar;»;

Экспортировать CLASSPATH = $ CLASSPATH:

/usr/share/poi-3.9/poi-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-schemas-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-3.9-20121203.tar:

/usr/share/poi-3.9/ooxml-lib/dom4j-1.6.1.tar:

/usr/share/poi-3.9/ooxml-lib/xmlbeans-2.3.0.tar

Apache POI Word – основные классы

В этой главе рассказывается о классах и методах Apache POI для управления документом Word.

Документ

Это маркерный интерфейс (интерфейс не содержит никаких методов), который уведомляет о том, что реализованный класс может создавать текстовый документ.

XWPFDocument

Это класс в пакете org.apache.poi.xwpf.usermodel . Он используется для создания документа MS-Word с форматом файла .docx.

Методы класса

Sr.No. Метод и описание
1

совершить ()

Сохраняет и сохраняет документ.

2

createParagraph ()

Добавляет новый абзац к этому документу.

3

CreateTable ()

Создает пустую таблицу с одной строкой и одним столбцом по умолчанию.

4

createTOC ()

Создает оглавление для документа Word.

5

getParagraphs ()

Возвращает параграф (ы), который содержит текст верхнего или нижнего колонтитула.

6

GetStyle ()

Возвращает используемый объект стилей.

совершить ()

Сохраняет и сохраняет документ.

createParagraph ()

Добавляет новый абзац к этому документу.

CreateTable ()

Создает пустую таблицу с одной строкой и одним столбцом по умолчанию.

createTOC ()

Создает оглавление для документа Word.

getParagraphs ()

Возвращает параграф (ы), который содержит текст верхнего или нижнего колонтитула.

GetStyle ()

Возвращает используемый объект стилей.

Остальные методы этого класса см. В полном документе API по адресу –

Пакет org.apache.poi.openxml4j.opc.internal .

XWPFParagraph

Это класс в пакете org.apache.poi.xwpf.usermodel и используется для создания абзаца в текстовом документе. Этот экземпляр также используется для добавления всех типов элементов в документ Word.

Методы класса

Sr.No. Метод и описание
1

createRun ()

Добавляет новый прогон к этому абзацу.

2

getAlignment ()

Возвращает выравнивание абзаца, которое должно применяться к тексту в этом абзаце.

3

setAlignment (ParagraphAlignment align)

Определяет выравнивание абзаца, которое должно применяться к тексту в этом абзаце.

4

setBorderBottom (Граница границы)

Определяет границу, которая должна отображаться под набором абзацев, которые имеют одинаковый набор настроек границ абзаца.

5

setBorderLeft (Граница границы)

Определяет границу, которая должна отображаться в левой части страницы вокруг указанного абзаца.

6

setBorderRight (Граница границы)

Определяет границу, которая должна отображаться в правой части страницы вокруг указанного абзаца.

7

setBorderTop (Граница границы)

Определяет границу, которая должна отображаться над набором абзацев с одинаковым набором настроек границ абзаца.

createRun ()

Добавляет новый прогон к этому абзацу.

getAlignment ()

Возвращает выравнивание абзаца, которое должно применяться к тексту в этом абзаце.

setAlignment (ParagraphAlignment align)

Определяет выравнивание абзаца, которое должно применяться к тексту в этом абзаце.

setBorderBottom (Граница границы)

Определяет границу, которая должна отображаться под набором абзацев, которые имеют одинаковый набор настроек границ абзаца.

setBorderLeft (Граница границы)

Определяет границу, которая должна отображаться в левой части страницы вокруг указанного абзаца.

setBorderRight (Граница границы)

Определяет границу, которая должна отображаться в правой части страницы вокруг указанного абзаца.

setBorderTop (Граница границы)

Определяет границу, которая должна отображаться над набором абзацев с одинаковым набором настроек границ абзаца.

Остальные методы этого класса см. В полном документе API по адресу –

Документация по POI API

XWPFRun

Это класс в пакете org.apache.poi.xwpf.usermodel и используется для добавления области текста в абзац.

Методы класса

Sr.No. Метод и описание
1

addBreak ()

Указывает, что перерыв должен быть размещен в текущем местоположении в содержимом прогона.

2

addTab ()

Указывает, что вкладка должна быть размещена в текущем местоположении в содержимом прогона.

3

setColor (java.lang.String rgbStr)

Устанавливает цвет текста.

4

setFontSize (int size)

Определяет размер шрифта, который должен применяться ко всем некомплексным символам скрипта в содержимом этого прогона при отображении.

5

setText (значение java.lang.String)

Устанавливает текст этого текстового прогона.

6

setBold (логическое значение)

Указывает, должно ли свойство bold применяться ко всем не сложным символам сценария в содержимом этого прогона при отображении в документе.

addBreak ()

Указывает, что перерыв должен быть размещен в текущем местоположении в содержимом прогона.

addTab ()

Указывает, что вкладка должна быть размещена в текущем местоположении в содержимом прогона.

setColor (java.lang.String rgbStr)

Устанавливает цвет текста.

setFontSize (int size)

Определяет размер шрифта, который должен применяться ко всем некомплексным символам скрипта в содержимом этого прогона при отображении.

setText (значение java.lang.String)

Устанавливает текст этого текстового прогона.

setBold (логическое значение)

Указывает, должно ли свойство bold применяться ко всем не сложным символам сценария в содержимом этого прогона при отображении в документе.

Остальные методы этого класса см. В полном документе API по адресу –

Документация по POI API

XWPFStyle

Это класс в пакете org.apache.poi.xwpf.usermodel и используется для добавления различных стилей к элементам объекта в текстовом документе.

Методы класса

Sr.No. Метод и описание
1

getNextStyleID ()

Он используется для получения StyleID следующего стиля.

2

getStyleId ()

Используется для получения StyleID стиля.

3

getStyles ()

Используется для получения стилей.

4

setStyleId (java.lang.String styleId)

Используется для установки styleID.

getNextStyleID ()

Он используется для получения StyleID следующего стиля.

getStyleId ()

Используется для получения StyleID стиля.

getStyles ()

Используется для получения стилей.

setStyleId (java.lang.String styleId)

Используется для установки styleID.

Остальные методы этого класса см. В полном документе API по адресу –

Документация по POI API

XWPFTable

Это класс в пакете org.apache.poi.xwpf.usermodel и используется для добавления табличных данных в текстовый документ.

Методы класса

Sr.No. Метод и описание
1

addNewCol ()

Добавляет новый столбец для каждой строки в этой таблице.

2

addRow (строка XWPFTableRow, int pos)

Добавляет новую строку в таблицу в позиции поз.

3

createRow ()

Создает новый объект XWPFTableRow с количеством ячеек, равным количеству столбцов, определенных в данный момент.

4

setWidth (int width)

Устанавливает ширину столбца.

addNewCol ()

Добавляет новый столбец для каждой строки в этой таблице.

addRow (строка XWPFTableRow, int pos)

Добавляет новую строку в таблицу в позиции поз.

createRow ()

Создает новый объект XWPFTableRow с количеством ячеек, равным количеству столбцов, определенных в данный момент.

setWidth (int width)

Устанавливает ширину столбца.

Остальные методы этого класса см. В полном документе API по адресу: Документация по POI API.

XWPFWordExtractor

Это класс в пакете org.apache.poi.xwpf.extractor . Это базовый класс синтаксического анализатора, используемый для извлечения простого текста из документа Word.

Методы класса

Sr.No. Метод и описание
1

GetText ()

Извлекает весь текст из документа.

GetText ()

Извлекает весь текст из документа.

Остальные методы этого класса см. В полном документе API по адресу: Документация по POI API.

Apache POI Word – Документ

Здесь термин «документ» относится к файлу MS-Word. После завершения этой главы вы сможете создавать новые документы и открывать существующие документы с помощью вашей Java-программы.

Создать пустой документ

Следующая простая программа используется для создания пустого документа MS-Word –

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

public class CreateDocument {

   public static void main(String[] args)throws Exception  {
   
      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
		
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream( new File("createdocument.docx"));
      document.write(out);
      out.close();
      System.out.println("createdocument.docx written successully");
   }
}

Сохраните приведенный выше Java-код как CreateDocument.java, а затем скомпилируйте и выполните его из командной строки следующим образом:

$javac  CreateDocument.java
$java CreateDocument

Если ваша системная среда сконфигурирована с библиотекой POI, она скомпилируется и выполнится для генерации пустого файла Excel с именем creationocument.docx в вашем текущем каталоге и отображения следующего вывода в командной строке:

createdocument.docx written successfully

Apache POI Word – пункт

В этой главе вы узнаете, как создать абзац и как добавить его в документ с помощью Java. Абзац является частью страницы в файле Word.

После завершения этой главы вы сможете создать абзац и выполнить над ним операции чтения.

Создать абзац

Прежде всего, давайте создадим Paragraph, используя ссылочные классы, обсуждавшиеся в предыдущих главах. Следуя предыдущей главе, сначала создайте документ, а затем мы можем создать абзац.

Следующий фрагмент кода используется для создания электронной таблицы:

//Create Blank document
   XWPFDocument document = new XWPFDocument();

//Create a blank spreadsheet
   XWPFParagraph paragraph = document.createParagraph();

Запустить на параграфе

Вы можете ввести текст или любой элемент объекта, используя Run . С помощью экземпляра Paragraph вы можете создать прогон .

Следующий фрагмент кода используется для создания Run.

XWPFRun run = paragraph.createRun();

Написать в параграф

Давайте попробуем ввести текст в документ. Рассмотрим следующие текстовые данные –

At tutorialspoint.com, we strive hard to provide quality tutorials for self-learning
purpose in the domains of Academics, Information Technology, Management and Computer
Programming Languages.

Следующий код используется для записи вышеуказанных данных в абзац.

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class CreateParagraph {

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

      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
      
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(new File("createparagraph.docx"));
        
      //create Paragraph
      XWPFParagraph paragraph = document.createParagraph();
      XWPFRun run = paragraph.createRun();
      run.setText("At tutorialspoint.com, we strive hard to " +
         "provide quality tutorials for self-learning " +
         "purpose in the domains of Academics, Information " +
         "Technology, Management and Computer Programming
         Languages.");
			
      document.write(out);
      out.close();
      System.out.println("createparagraph.docx written successfully");
   }
}

Сохраните приведенный выше Java-код как CreateParagraph.java, а затем скомпилируйте и запустите его из командной строки следующим образом:

$javac CreateParagraph.java
$java CreateParagraph

Он скомпилируется и выполнится для создания файла Word с именем createparagraph.docx в вашем текущем каталоге, и вы получите следующий вывод в командной строке –

createparagraph.docx written successfully

Файл createparagraph.docx выглядит следующим образом.

Создать абзац

Apache POI Word – Границы

В этой главе вы узнаете, как применить границу к абзацу с помощью Java-программирования.

Применяя границу

Следующий код используется для применения границ в документе –

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.Borders;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class ApplyingBorder {

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

      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
        
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(new File("applyingborder.docx"));
        
      //create paragraph
      XWPFParagraph paragraph = document.createParagraph();
        
      //Set bottom border to paragraph
      paragraph.setBorderBottom(Borders.BASIC_BLACK_DASHES);
        
      //Set left border to paragraph
      paragraph.setBorderLeft(Borders.BASIC_BLACK_DASHES);
        
      //Set right border to paragraph
      paragraph.setBorderRight(Borders.BASIC_BLACK_DASHES);
        
      //Set top border to paragraph
      paragraph.setBorderTop(Borders.BASIC_BLACK_DASHES);
        
      XWPFRun run = paragraph.createRun();
         run.setText("At tutorialspoint.com, we strive hard to " +
         "provide quality tutorials for self-learning " +
         "purpose in the domains of Academics, Information " +
         "Technology, Management and Computer Programming " +
         "Languages.");
        
      document.write(out);
      out.close();
      System.out.println("applyingborder.docx written successully");
   }
}

Сохраните приведенный выше код в файле с именем ApplyingBorder.java, скомпилируйте и выполните его из командной строки следующим образом:

$javac ApplyingBorder.java
$java ApplyingBorder

Если ваша система сконфигурирована с библиотекой POI, то она скомпилируется и выполнится, чтобы сгенерировать документ Word с именем applyborder.docx в вашем текущем каталоге и отобразить следующий вывод:

applyingborder.docx written successfully

Файл applyborder.docx выглядит следующим образом –

Пограничный абзац

Apache POI Word – Таблицы

В этой главе вы узнаете, как создать таблицу данных в документе. Вы можете создать данные таблицы с помощью класса XWPFTable . Добавив каждую строку в таблицу и добавив каждую ячейку в строку, вы получите данные таблицы.

Создать таблицу

Следующий код используется для создания таблицы в документе –

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

public class CreateTable {

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

      //Blank Document
      XWPFDocument document = new XWPFDocument();
        
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(new File("create_table.docx"));
        
      //create table
      XWPFTable table = document.createTable();
		
      //create first row
      XWPFTableRow tableRowOne = table.getRow(0);
      tableRowOne.getCell(0).setText("col one, row one");
      tableRowOne.addNewTableCell().setText("col two, row one");
      tableRowOne.addNewTableCell().setText("col three, row one");
		
      //create second row
      XWPFTableRow tableRowTwo = table.createRow();
      tableRowTwo.getCell(0).setText("col one, row two");
      tableRowTwo.getCell(1).setText("col two, row two");
      tableRowTwo.getCell(2).setText("col three, row two");
		
      //create third row
      XWPFTableRow tableRowThree = table.createRow();
      tableRowThree.getCell(0).setText("col one, row three");
      tableRowThree.getCell(1).setText("col two, row three");
      tableRowThree.getCell(2).setText("col three, row three");
	
      document.write(out);
      out.close();
      System.out.println("create_table.docx written successully");
   }
}

Сохраните приведенный выше код в файле с именем CreateTable.java. Скомпилируйте и выполните его из командной строки следующим образом:

$javac CreateTable.java
$java CreateTable

Он генерирует файл Word с именем createtable.docx в вашем текущем каталоге и отображает следующий вывод в командной строке –

createtable.docx written successfully

Файл createtable.docx выглядит следующим образом –

Создать таблицу

Apache POI Word – шрифт и выравнивание

В этой главе показано, как применять различные стили шрифтов и выравнивания в документе Word с использованием Java. Обычно стиль шрифта содержит: размер шрифта, тип, полужирный, курсив и подчеркивание. А выравнивание подразделяется на левое, центральное, правое и оправданное.

Стиль шрифта

Следующий код используется для установки различных стилей шрифта –

import java.io.File;
import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.VerticalAlign;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class FontStyle {

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

      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
        
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(new File("fontstyle.docx"));
        
      //create paragraph
      XWPFParagraph paragraph = document.createParagraph();
        
      //Set Bold an Italic
      XWPFRun paragraphOneRunOne = paragraph.createRun();
      paragraphOneRunOne.setBold(true);
      paragraphOneRunOne.setItalic(true);
      paragraphOneRunOne.setText("Font Style");
      paragraphOneRunOne.addBreak();
        
      //Set text Position
      XWPFRun paragraphOneRunTwo = paragraph.createRun();
      paragraphOneRunTwo.setText("Font Style two");
      paragraphOneRunTwo.setTextPosition(100);
 
      //Set Strike through and Font Size and Subscript
      XWPFRun paragraphOneRunThree = paragraph.createRun();
      paragraphOneRunThree.setStrike(true);
      paragraphOneRunThree.setFontSize(20);
      paragraphOneRunThree.setSubscript(VerticalAlign.SUBSCRIPT);
      paragraphOneRunThree.setText(" Different Font Styles");
        
      document.write(out);
      out.close();
      System.out.println("fontstyle.docx written successully");
   }
}

Сохраните приведенный выше код как FontStyle.java, а затем скомпилируйте и выполните его из командной строки следующим образом:

$javac FontStyle.java
$java FontStyle

Он создаст файл Word с именем fontstyle.docx в вашем текущем каталоге и отобразит следующий вывод в командной строке –

fontstyle.docx written successfully

Файл fontstyle.docx выглядит следующим образом.

Стиль шрифта

центровка

Следующий код используется для установки выравнивания по тексту абзаца –

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class AlignParagraph {

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

      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
        
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(
      new File("alignparagraph.docx"));
        
      //create paragraph
      XWPFParagraph paragraph = document.createParagraph();
        
      //Set alignment paragraph to RIGHT
      paragraph.setAlignment(ParagraphAlignment.RIGHT);
      XWPFRun run = paragraph.createRun();
      run.setText("At tutorialspoint.com, we strive hard to " +
         "provide quality tutorials for self-learning " +
         "purpose in the domains of Academics, Information " +
         "Technology, Management and Computer Programming " +
         "Languages.");
        
      //Create Another paragraph
      paragraph = document.createParagraph();
        
      //Set alignment paragraph to CENTER
      paragraph.setAlignment(ParagraphAlignment.CENTER);
      run = paragraph.createRun();
      run.setText("The endeavour started by Mohtashim, an AMU " +
         "alumni, who is the founder and the managing director " +
         "of Tutorials Point (I) Pvt. Ltd. He came up with the " +
         "website tutorialspoint.com in year 2006 with the help" +
         "of handpicked freelancers, with an array of tutorials" +
         " for computer programming languages. ");
			
      document.write(out);
      out.close();
      System.out.println("alignparagraph.docx written successfully");
   }
}

Сохраните приведенный выше код как AlignParagraph.java, а затем скомпилируйте и выполните его из командной строки следующим образом:

$javac AlignParagraph.java
$java AlignParagraph

Он создаст файл Word с именем alignparagraph.docx в вашем текущем каталоге и отобразит следующий вывод в командной строке –

alignparagraph.docx written successfully

Файл alignparagraph.docx выглядит следующим образом –

Выровнять абзац

Apache POI Word – извлечение текста

В этой главе объясняется, как извлечь простые текстовые данные из документа Word с помощью Java. Если вы хотите извлечь метаданные из документа Word, используйте Apache Tika.

Для файлов .docx мы используем класс org.apache.poi.xwpf.extractor.XPFFWordExtractor, который извлекает и возвращает простые данные из файла Word. Точно так же у нас есть разные методологии для извлечения заголовков, сносок, табличных данных и т. Д. Из файла Word.

Следующий код показывает, как извлечь простой текст из файла Word –

import java.io.FileInputStream;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

public class WordExtractor {

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

      XWPFDocument docx = new XWPFDocument(new FileInputStream("create_paragraph.docx"));
      
      //using XWPFWordExtractor Class
      XWPFWordExtractor we = new XWPFWordExtractor(docx);
      System.out.println(we.getText());
   }
}

Сохраните приведенный выше код как WordExtractor.java. Скомпилируйте и выполните его из командной строки следующим образом:

$javac WordExtractor.java
$java WordExtractor

Будет сгенерирован следующий вывод:

In this article we will be discussing about ways and techniques to read word documents in Java using Apache POI library. The word document may contain images, tables or plain text. Apart from this a standard word file has header and footers too. Here in the following examples we will be parsing a word document by reading its different paragraph, runs, images, tables along with headers and footers. We will also take a look into identifying different styles associated with the paragraphs such as font-size, font-family, font-color etc.

Maven Dependencies

Following is the poi maven depedency required to read word documents. For latest artifacts visit here

pom.xml

	<dependencies>
		<dependency>
                     <groupId>org.apache.poi</groupId>
                     <artifactId>poi-ooxml</artifactId>
		     <version>3.16</version>
                 </dependency>
	</dependencies>

Reading Complete Text from Word Document

The class XWPFDocument has many methods defined to read and extract .docx file contents. getText() can be used to read all the texts in a .docx word document. Following is an example.

TextReader.java

public class TextReader {
	
	public static void main(String[] args) {
	 try {
		   FileInputStream fis = new FileInputStream("test.docx");
		   XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));
		   XWPFWordExtractor extractor = new XWPFWordExtractor(xdoc);
		   System.out.println(extractor.getText());
		} catch(Exception ex) {
		    ex.printStackTrace();
		}
 }

}

Reading Headers and Foooters of Word Document

Apache POI provides inbuilt methods to read headers and footers of a word document. Following is an example that reads and prints header and footer of a word document. The example .docx file is available in the source which can be downloaded at the end of thos article.

HeaderFooter.java

public class HeaderFooterReader {

	public static void main(String[] args) {
		
		try {
			FileInputStream fis = new FileInputStream("test.docx");
			XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));
			XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(xdoc);

			XWPFHeader header = policy.getDefaultHeader();
			if (header != null) {
				System.out.println(header.getText());
			}

			XWPFFooter footer = policy.getDefaultFooter();
			if (footer != null) {
				System.out.println(footer.getText());
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

}

Output

This is Header

This is footer

 Other Interesting Posts
Java 8 Lambda Expression
Java 8 Stream Operations
Java 8 Datetime Conversions
Random Password Generator in Java

Read Each Paragraph of a Word Document

Among the many methods defined in XWPFDocument class, we can use getParagraphs() to read a .docx word document paragraph wise.This method returns a list of all the paragraphs(XWPFParagraph) of a word document. Again the XWPFParagraph has many utils method defined to extract information related to any paragraph such as text alignment, style associated with the paragrpahs.

To have more control over the text reading of a word document,each paragraph is again divided into multiple runs. Run defines a region of text with a common set of properties.Following is an example to read paragraphs from a .docx word document.

ParagraphReader.java

public class ParagraphReader {

	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream("test.docx");
			XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));

			List paragraphList = xdoc.getParagraphs();

			for (XWPFParagraph paragraph : paragraphList) {

				System.out.println(paragraph.getText());
				System.out.println(paragraph.getAlignment());
				System.out.print(paragraph.getRuns().size());
				System.out.println(paragraph.getStyle());

				// Returns numbering format for this paragraph, eg bullet or lowerLetter.
				System.out.println(paragraph.getNumFmt());
				System.out.println(paragraph.getAlignment());

				System.out.println(paragraph.isWordWrapped());

				System.out.println("********************************************************************");
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

Reading Tables from Word Document

Following is an example to read tables present in a word document. It will print all the text rows wise.

TableReader.java

public class TableReader {

	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream("test.docx");
			XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));
			Iterator bodyElementIterator = xdoc.getBodyElementsIterator();
			while (bodyElementIterator.hasNext()) {
				IBodyElement element = bodyElementIterator.next();

				if ("TABLE".equalsIgnoreCase(element.getElementType().name())) {
					List tableList = element.getBody().getTables();
					for (XWPFTable table : tableList) {
						System.out.println("Total Number of Rows of Table:" + table.getNumberOfRows());
						for (int i = 0; i < table.getRows().size(); i++) {

							for (int j = 0; j < table.getRow(i).getTableCells().size(); j++) {
								System.out.println(table.getRow(i).getCell(j).getText());
							}
						}
					}
				}
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

Reading Styles from Word Document

Styles are associated with runs of a paragraph. There are many methods available in the XWPFRun class to identify the styles associated with the text.There are methods to identify boldness, highlighted words, capitalized words etc.

StyleReader.java

public class StyleReader {

	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream("test.docx");
			XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));

			List paragraphList = xdoc.getParagraphs();

			for (XWPFParagraph paragraph : paragraphList) {

				for (XWPFRun rn : paragraph.getRuns()) {

					System.out.println(rn.isBold());
					System.out.println(rn.isHighlighted());
					System.out.println(rn.isCapitalized());
					System.out.println(rn.getFontSize());
				}

				System.out.println("********************************************************************");
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

}

Reading Image from Word Document

Following is an example to read image files from a word document.

public class ImageReader {

	public static void main(String[] args) {

		try {
			FileInputStream fis = new FileInputStream("test.docx");
			XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));
			List pic = xdoc.getAllPictures();
			if (!pic.isEmpty()) {
				System.out.print(pic.get(0).getPictureType());
				System.out.print(pic.get(0).getData());
			}

		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

}

Conclusion

I hope this article served you that you were looking for. If you have anything that you want to add or share then please share it below in the comment section.

Download source


Apache POI Word — Overview

Many a time, a software application is required to generate reference documents in Microsoft Word file format. Sometimes, an application is even expected to receive Word files as input data.

Any Java programmer who wants to produce MS-Office files as output must use a predefined and read-only API to do so.

What is Apache POI?

Apache POI is a popular API that allows programmers to create, modify, and display MS-Office files using Java programs. It is an open source library developed and distributed by Apache Software Foundation to design or modify MS-Office files using Java program. It contains classes and methods to decode the user input data or a file into MS-Office documents.

Components of Apache POI

Apache POI contains classes and methods to work on all OLE2 Compound documents of MS-Office. The list of components of this API is given below −

  • POIFS (Poor Obfuscation Implementation File System) − This component is the basic factor of all other POI elements. It is used to read different files explicitly.

  • HSSF (Horrible SpreadSheet Format) − It is used to read and write .xls format of MS-Excel files.

  • XSSF (XML SpreadSheet Format) − It is used for .xlsx file format of MS-Excel.

  • HPSF (Horrible Property Set Format) − It is used to extract property sets of the MS-Office files.

  • HWPF (Horrible Word Processor Format) − It is used to read and write .doc extension files of MS-Word.

  • XWPF (XML Word Processor Format) − It is used to read and write .docx extension files of MS-Word.

  • HSLF (Horrible Slide Layout Format) − It is used to read, create, and edit PowerPoint presentations.

  • HDGF (Horrible DiaGram Format) − It contains classes and methods for MS-Visio binary files.

  • HPBF (Horrible PuBlisher Format) − It is used to read and write MS-Publisher files.

This tutorial guides you through the process of working on MS-Word files using Java. Therefore the discussion is confined to HWPF and XWPF components.

Note − OLDER VERSIONS OF POI SUPPORT BINARY FILE FORMATS SUCH AS DOC, XLS, PPT, ETC. VERSION 3.5 ONWARDS, POI SUPPORTS OOXML FILE FORMATS OF MS-OFFICE SUCH AS DOCX, XLSX, PPTX, ETC.

Apache POI Word — Installation

This chapter takes you through the process of setting up Apache POI on Windows and Linux based systems. Apache POI can be easily installed and integrated with your current Java environment following a few simple steps without any complex setup procedures. User administration is required while installation.

System Requirements

JDK Java SE 2 JDK 1.5 or above
Memory 1 GB RAM (recommended)
Disk Space No minimum requirement
Operating System Version Windows XP or above, Linux

Let us now proceed with the steps to install Apache POI.

Step 1: Verify your Java Installation

First of all, you need to have Java Software Development Kit (SDK) installed on your system. To verify this, execute any of the two commands depending on the platform you are working on.

If the Java installation has been done properly, then it will display the current version and specification of your Java installation. A sample output is given in the following table.

Platform Command Sample Output
Windows

Open command console and type −

>java -version

java version «11.0.11» 2021-04-20 LTS

Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)

Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)

Linux

Open command terminal and type −

$java -version

java version «11.0.11» 2021-04-20 LTS

Open JDK Runtime Environment 18.9 (build 11.0.11+9-LTS-194)

Open JDK 64-Bit Server VM (build 11.0.11+9-LTS-194, mixed mode)

  • We assume the readers of this tutorial have Java SDK version 11.0.11 installed on their system.

  • In case you do not have Java SDK, download its current version from www.oracle.com/technetwork/java/javase/downloads/index.html and have it installed.

Step 2: Set your Java Environment

Set the environment variable JAVA_HOME to point to the base directory location where Java is installed on your machine. For example,

Sr.No. Platform & Description
1

Windows

Set JAVA_HOME to C:ProgramFilesjavajdk11.0.11

2

Linux

Export JAVA_HOME = /usr/local/java-current

Append the full path of Java compiler location to the System Path.

Sr.No. Platform & Description
1

Windows

Append the String «C:Program FilesJavajdk11.0.11bin» to the end of the system variable PATH.

2

Linux

Export PATH = $PATH:$JAVA_HOME/bin/

Execute the command java -version from the command prompt as explained above.

Step 3: Install Apache POI Library

Download the latest version of Apache POI from https://poi.apache.org/download.html and unzip its contents to a folder from where the required libraries can be linked to your Java program. Let us assume the files are collected in a folder on C drive.

Add the complete path of the required jars as shown below to the CLASSPATH.

Sr.No. Platform & Description
1

Windows

Append the following strings to the end of the user variable

CLASSPATH −

C:poi-bin-5.1.0poi-5.1.0.jar;

C:poi-bin-5.1.0poi-ooxml-5.1.0.jar;

C:poi-bin-5.1.0poi-ooxml-full-5.1.0.jar;

C:poi-bin-5.1.0libcommons-codec-1.15.jar;

C:poi-bin-5.1.0libcommons-collections4-4.4.jar;

C:poi-bin-5.1.0libcommons-io-2.11.0.jar;

C:poi-bin-5.1.0libcommons-math3-3.6.1.jar;

C:poi-bin-5.1.0liblog4j-api-2.14.1.jar;

C:poi-bin-5.1.0libSparseBitSet-1.2.jar;

Cpoi-bin-5.1.0ooxml-libcommons-compress-1.21.jar

Cpoi-bin-5.1.0ooxml-libcommons-logging-1.2.jar

Cpoi-bin-5.1.0ooxml-libcurvesapi-1.06.jar

Cpoi-bin-5.1.0ooxml-libslf4j-api-1.7.32.jar

Cpoi-bin-5.1.0ooxml-libxmlbeans-5.0.2.jar

2

Linux

Export CLASSPATH = $CLASSPATH:

/usr/share/poi-bin-5.1.0/poi-5.1.0.jar.tar:

/usr/share/poi-bin-5.1.0/poi-ooxml-5.1.0.tar:

/usr/share/poi-bin-5.1.0/poi-ooxml-full-5.1.0.tar:

/usr/share/poi-bin-5.1.0/lib/commons-codec-1.15.jar.tar:

/usr/share/poi-bin-5.1.0/lib/commons-collections4-4.4.tar:

/usr/share/poi-bin-5.1.0/lib/commons-io-2.11.0.tar:

/usr/share/poi-bin-5.1.0/lib/commons-math3-3.6.1.tar:

/usr/share/poi-bin-5.1.0/lib/log4j-api-2.14.1.tar:

/usr/share/poi-bin-5.1.0/lib/SparseBitSet-1.2.tar:

/usr/share/poi-bin-5.1.0/ooxml-lib/commons-compress-1.21.tar:

/usr/share/poi-bin-5.1.0/ooxml-lib/commons-logging-1.2.tar:

/usr/share/poi-bin-5.1.0/ooxml-lib/curvesapi-1.06.tar:

/usr/share/poi-bin-5.1.0/ooxml-lib/slf4j-api-1.7.32.tar:

/usr/share/poi-bin-5.1.0/ooxml-lib/xmlbeans-5.0.2.tar:

Apache POI Word — Core Classes

This chapter takes you through the classes and methods of Apache POI for managing a Word document.

Document

This is a marker interface (interface do not contain any methods), that notifies that the implemented class can be able to create a word document.

XWPFDocument

This is a class under org.apache.poi.xwpf.usermodel package. It is used to create MS-Word Document with .docx file format.

Class Methods

Sr.No. Method & Description
1

commit()

Commits and saves the document.

2

createParagraph()

Appends a new paragraph to this document.

3

createTable()

Creates an empty table with one row and one column as default.

4

createTOC()

Creates a table of content for Word document.

5

getParagraphs()

Returns the paragraph(s) that holds the text of the header or footer.

6

getStyle()

Returns the styles object used.

For the remaining methods of this class, refer the complete API document at −

Package org.apache.poi.openxml4j.opc.internal.

XWPFParagraph

This is a class under org.apache.poi.xwpf.usermodel package and is used to create paragraph in a word document. This instance is also used to add all types of elements into word document.

Class Methods

Sr.No. Method & Description
1

createRun()

Appends a new run to this paragraph.

2

getAlignment()

Returns the paragraph alignment which shall be applied to the text in this paragraph.

3

setAlignment(ParagraphAlignment align)

Specifies the paragraph alignment which shall be applied to the text in this paragraph.

4

setBorderBottom(Borders border)

Specifies the border which shall be displayed below a set of paragraphs, which have the same set of paragraph border settings.

5

setBorderLeft(Borders border)

Specifies the border which shall be displayed on the left side of the page around the specified paragraph.

6

setBorderRight(Borders border)

Specifies the border which shall be displayed on the right side of the page around the specified paragraph.

7

setBorderTop(Borders border)

Specifies the border which shall be displayed above a set of paragraphs which have the same set of paragraph border settings.

For the remaining methods of this class, refer the complete API document at −

POI API Documentation

XWPFRun

This is a class under org.apache.poi.xwpf.usermodel package and is used to add a region of text to the paragraph.

Class Methods

Sr.No. Method & Description
1

addBreak()

Specifies that a break shall be placed at the current location in the run content.

2

addTab()

Specifies that a tab shall be placed at the current location in the run content.

3

setColor(java.lang.String rgbStr)

Sets text color.

4

setFontSize(int size)

Specifies the font size which shall be applied to all noncomplex script characters in the content of this run when displayed.

5

setText(java.lang.String value)

Sets the text of this text run.

6

setBold(boolean value)

Specifies whether the bold property shall be applied to all non-complex script characters in the content of this run when displayed in a document.

For the remaining methods of this class, refer the complete API document at −

POI API Documentation

XWPFStyle

This is a class under org.apache.poi.xwpf.usermodel package and is used to add different styles to the object elements in a word document.

Class Methods

Sr.No. Method & Description
1

getNextStyleID()

It is used to get StyleID of the next style.

2

getStyleId()

It is used to get StyleID of the style.

3

getStyles()

It is used to get styles.

4

setStyleId(java.lang.String styleId)

It is used to set styleID.

For the remaining methods of this class, refer the complete API document at −

POI API Documentation

XWPFTable

This is a class under org.apache.poi.xwpf.usermodel package and is used to add table data into a word document.

Class Methods

Sr.No. Method & Description
1

addNewCol()

Adds a new column for each row in this table.

2

addRow(XWPFTableRow row, int pos)

Adds a new Row to the table at position pos.

3

createRow()

Creates a new XWPFTableRow object with as many cells as the number of columns defined in that moment.

4

setWidth(int width)

Sets the width of the column.

For the remaining methods of this class, refer the complete API document at −
POI API Documentation

XWPFWordExtractor

This is a class under org.apache.poi.xwpf.extractor package. It is a basic parser class used to extract the simple text from a Word document.

Class Methods

Sr.No. Method & Description
1

getText()

Retrieves all the text from the document.

For the remaining methods of this class, refer the complete API document at −
POI API Documentation

Apache POI Word — Document

Here the term ‘document’ refers to a MS-Word file. After completion of this chapter, you will be able to create new documents and open existing documents using your Java program.

Create Blank Document

The following simple program is used to create a blank MS-Word document −

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

public class CreateDocument {
   public static void main(String[] args)throws Exception  {
      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
		
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream( new File("createdocument.docx"));
      document.write(out);
      out.close();
      System.out.println("createdocument.docx written successully");
   }
}

Save the above Java code as CreateDocument.java, and then compile and execute it from the command prompt as follows −

$javac  CreateDocument.java
$java CreateDocument

If your system environment is configured with the POI library, it will compile and execute to generate a blank Word document file named createdocument.docx in your current directory and display the following output in the command prompt −

createdocument.docx written successfully

Apache POI Word — Paragraph

In this chapter you will learn how to create a Paragraph and how to add it to a document using Java. Paragraph is a part of a page in a Word file.

After completing this chapter, you will be able to create a Paragraph and perform read operations on it.

Create a Paragraph

First of all, let us create a Paragraph using the referenced classes discussed in the earlier chapters. By following the previous chapter, create a Document first, and then we can create a Paragraph.

The following code snippet is used to create a spreadsheet −

//Create Blank document
XWPFDocument document = new XWPFDocument();

//Create a blank spreadsheet
XWPFParagraph paragraph = document.createParagraph();

Run on Paragraph

You can enter the text or any object element, using Run. Using Paragraph instance you can create run.

The following code snippet is used to create a Run.

XWPFRun run = paragraph.createRun();

Write into a Paragraph

Let us try entering some text into a document. Consider the below text data −

At tutorialspoint.com, we strive hard to provide quality tutorials for self-learning purpose 
in the domains of Academics, Information Technology, Management and Computer Programming Languages.

The following code is used to write the above data into a paragraph.

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class CreateParagraph {
   public static void main(String[] args)throws Exception {
      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
      
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(new File("createparagraph.docx"));
        
      //create Paragraph
      XWPFParagraph paragraph = document.createParagraph();
      XWPFRun run = paragraph.createRun();
      run.setText("At tutorialspoint.com, we strive hard to " +
         "provide quality tutorials for self-learning " +
         "purpose in the domains of Academics, Information " +
         "Technology, Management and Computer Programming Languages.");
			
      document.write(out);
      out.close();
      System.out.println("createparagraph.docx written successfully");
   }
}

Save the above Java code as CreateParagraph.java, and then compile and run it from the command prompt as follows −

$javac CreateParagraph.java
$java CreateParagraph

It will compile and execute to generate a Word file named createparagraph.docx in your current directory and you will get the following output in the command prompt −

createparagraph.docx written successfully

The createparagraph.docx file looks as follows.

Create Paragraph

Apache POI Word — Borders

In this chapter, you will learn how to apply border to a paragraph using Java programming.

Applying Border

The following code is used to apply Borders in a Document −

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.Borders;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class ApplyingBorder {

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

      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
        
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(new File("applyingborder.docx"));
        
      //create paragraph
      XWPFParagraph paragraph = document.createParagraph();
        
      //Set bottom border to paragraph
      paragraph.setBorderBottom(Borders.BASIC_BLACK_DASHES);
        
      //Set left border to paragraph
      paragraph.setBorderLeft(Borders.BASIC_BLACK_DASHES);
        
      //Set right border to paragraph
      paragraph.setBorderRight(Borders.BASIC_BLACK_DASHES);
        
      //Set top border to paragraph
      paragraph.setBorderTop(Borders.BASIC_BLACK_DASHES);
        
      XWPFRun run = paragraph.createRun();
         run.setText("At tutorialspoint.com, we strive hard to " +
         "provide quality tutorials for self-learning " +
         "purpose in the domains of Academics, Information " +
         "Technology, Management and Computer Programming " +
         "Languages.");
        
      document.write(out);
      out.close();
      System.out.println("applyingborder.docx written successully");
   }
}

Save the above code in a file named ApplyingBorder.java, compile and execute it from the command prompt as follows −

$javac ApplyingBorder.java
$java ApplyingBorder

If your system is configured with the POI library, then it will compile and execute to generate a Word document named applyingborder.docx in your current directory and display the following output −

applyingborder.docx written successfully

The applyingborder.docx file looks as follows −

Border Paragraph

Apache POI Word — Tables

In this chapter, you will learn how to create a table of data in a document. You can create a table data by using XWPFTable class. By adding each Row to table and adding each cell to Row, you will get table data.

Create Table

The following code is used to creating table in a document −

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

public class CreateTable {

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

      //Blank Document
      XWPFDocument document = new XWPFDocument();
        
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(new File("create_table.docx"));
        
      //create table
      XWPFTable table = document.createTable();
		
      //create first row
      XWPFTableRow tableRowOne = table.getRow(0);
      tableRowOne.getCell(0).setText("col one, row one");
      tableRowOne.addNewTableCell().setText("col two, row one");
      tableRowOne.addNewTableCell().setText("col three, row one");
		
      //create second row
      XWPFTableRow tableRowTwo = table.createRow();
      tableRowTwo.getCell(0).setText("col one, row two");
      tableRowTwo.getCell(1).setText("col two, row two");
      tableRowTwo.getCell(2).setText("col three, row two");
		
      //create third row
      XWPFTableRow tableRowThree = table.createRow();
      tableRowThree.getCell(0).setText("col one, row three");
      tableRowThree.getCell(1).setText("col two, row three");
      tableRowThree.getCell(2).setText("col three, row three");
	
      document.write(out);
      out.close();
      System.out.println("create_table.docx written successully");
   }
}

Save the above code in a file named CreateTable.java. Compile and execute it from the command prompt as follows −

$javac CreateTable.java
$java CreateTable

It generates a Word file named createtable.docx in your current directory and display the following output on the command prompt −

createtable.docx written successfully

The createtable.docx file looks as follows −

Create Table

Apache POI Word — Font & Alignment

This chapter shows how to apply different font styles and alignments in a Word document using Java. Generally, Font Style contains: Font size, Type, Bold, Italic, and Underline. And Alignment is categorized into left, center, right, and justify.

Font Style

The following code is used to set different styles of font −

import java.io.File;
import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.VerticalAlign;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class FontStyle {

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

      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
        
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(new File("fontstyle.docx"));
        
      //create paragraph
      XWPFParagraph paragraph = document.createParagraph();
        
      //Set Bold an Italic
      XWPFRun paragraphOneRunOne = paragraph.createRun();
      paragraphOneRunOne.setBold(true);
      paragraphOneRunOne.setItalic(true);
      paragraphOneRunOne.setText("Font Style");
      paragraphOneRunOne.addBreak();
        
      //Set text Position
      XWPFRun paragraphOneRunTwo = paragraph.createRun();
      paragraphOneRunTwo.setText("Font Style two");
      paragraphOneRunTwo.setTextPosition(100);
 
      //Set Strike through and Font Size and Subscript
      XWPFRun paragraphOneRunThree = paragraph.createRun();
      paragraphOneRunThree.setStrike(true);
      paragraphOneRunThree.setFontSize(20);
      paragraphOneRunThree.setSubscript(VerticalAlign.SUBSCRIPT);
      paragraphOneRunThree.setText(" Different Font Styles");
        
      document.write(out);
      out.close();
      System.out.println("fontstyle.docx written successully");
   }
}

Save the above code as FontStyle.java and then compile and execute it from the command prompt as follows −

$javac FontStyle.java
$java FontStyle

It will generate a Word file named fontstyle.docx in your current directory and display the following output on the command prompt −

fontstyle.docx written successfully

The fontstyle.docx file looks as follows.

Font Style

Alignment

The following code is used to set alignment to the paragraph text −

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class AlignParagraph {

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

      //Blank Document
      XWPFDocument document = new XWPFDocument(); 
        
      //Write the Document in file system
      FileOutputStream out = new FileOutputStream(
      new File("alignparagraph.docx"));
        
      //create paragraph
      XWPFParagraph paragraph = document.createParagraph();
        
      //Set alignment paragraph to RIGHT
      paragraph.setAlignment(ParagraphAlignment.RIGHT);
      XWPFRun run = paragraph.createRun();
      run.setText("At tutorialspoint.com, we strive hard to " +
         "provide quality tutorials for self-learning " +
         "purpose in the domains of Academics, Information " +
         "Technology, Management and Computer Programming " +
         "Languages.");
        
      //Create Another paragraph
      paragraph = document.createParagraph();
        
      //Set alignment paragraph to CENTER
      paragraph.setAlignment(ParagraphAlignment.CENTER);
      run = paragraph.createRun();
      run.setText("The endeavour started by Mohtashim, an AMU " +
         "alumni, who is the founder and the managing director " +
         "of Tutorials Point (I) Pvt. Ltd. He came up with the " +
         "website tutorialspoint.com in year 2006 with the help" +
         "of handpicked freelancers, with an array of tutorials" +
         " for computer programming languages. ");
			
      document.write(out);
      out.close();
      System.out.println("alignparagraph.docx written successfully");
   }
}

Save the above code as AlignParagraph.java and then compile and execute it from the command prompt as follows −

$javac AlignParagraph.java
$java AlignParagraph

It will generate a Word file named alignparagraph.docx in your current directory and display the following output in the command prompt −

alignparagraph.docx written successfully

The alignparagraph.docx file looks as follows −

Align Paragraph

Apache POI Word — Text Extraction

This chapter explains how to extract simple text data from a Word document using Java. In case you want to extract metadata from a Word document, make use of Apache Tika.

For .docx files, we use the class org.apache.poi.xwpf.extractor.XPFFWordExtractor that extracts and returns simple data from a Word file. In the same way, we have different methodologies to extract headings, footnotes, table data, etc. from a Word file.

The following code shows how to extract simple text from a Word file −

import java.io.FileInputStream;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

public class WordExtractor {
   public static void main(String[] args)throws Exception {
      XWPFDocument docx = new XWPFDocument(new FileInputStream("createparagraph.docx"));
      
      //using XWPFWordExtractor Class
      XWPFWordExtractor we = new XWPFWordExtractor(docx);
      System.out.println(we.getText());
   }
}

Save the above code as WordExtractor.java. Compile and execute it from the command prompt as follows −

$javac WordExtractor.java
$java WordExtractor

It will generate the following output −

At tutorialspoint.com, we strive hard to provide quality tutorials for self-learning purpose
in the domains of Academics, Information Technology, Management and Computer Programming Languages.

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Работа с диаграммами в excel гистограмма
  • Работа с документами word doc
  • Работа с диаграммами в excel где находится
  • Работа с документами word 2013
  • Работа с диаграммами в excel виды диаграмм

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии