Библиотеки java для работы с word

Время на прочтение
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 не нарушая эту логику делает разработку гораздо более удобной.

README

What is docx4j?

docx4j is an open source (Apache v2) library for creating, editing, and saving OpenXML «packages», including docx, pptx, and xslx.

It uses JAXB to create the Java representation.

  • Open existing docx/pptx/xlsx
  • Create new docx/pptx/xlsx
  • Programmatically manipulate docx/pptx/xlsx (anything the file format allows)
  • Document generation via variable, content control data binding, or MERGEFIELD
  • CustomXML binding (with support for pictures, rich text, checkboxes, and OpenDoPE extensions for repeats & conditionals, and importing XHTML)
  • Export as HTML
  • Export as PDF, choice of 3 strategies, see https://www.docx4java.org/blog/2020/09/office-pptxxlsxdocx-to-pdf-to-in-docx4j-8-2-3/
  • Produce/consume Word 2007’s xmlPackage (pkg) format
  • Apply transforms, including common filters
  • Font support (font substitution, and use of any fonts embedded in the document)

docx4j for JAXB 3.0 and Java 11+

docx4j v11.4.5 uses Jakarta XML Binding API 3.0, as opposed to JAXB 2.x used in earlier versions (which import javax.xml.bind.*). Since this release uses jakarta.xml.bind, rather than javax.xml.bind, if you have existing code which imports javax.xml.bind, you’ll need to search/replace across your code base, replacing javax.xml.bind with jakarta.xml.bind. You’ll also need to replace your JAXB jars (which Maven will do for you automatically; otherwise get them from the relevant zip file).

Being a JPMS modularised release, the jars also contain module-info.class entries.

To use it, add the dep corresponding to the JAXB implementation you wish to use

docx4j-8

This is docx4j for Java 8. Although in principle it would compile and run under Java 6, some of its
dependencies are Java 8 only. So to run it under Java 6, you’d need to use the same version of the deps
which docx4j 6.x uses.

docx4j v8 is a multi-module Maven project.

To use docx4j v8, add the dep corresponding to the JAXB implementation you wish to use

You should use one and only one of docx4j-JAXB-*

How do I build docx4j?

Get it from GitHub, at https://github.com/plutext/docx4j

Some of the tests might fail on Windows. For now, you could skip them: mvn install -DskipTests

For more details, see http://www.docx4java.org/blog/2015/06/docx4j-from-github-in-eclipse-5-years-on/

If you are working with the source code, please join the developer
mailing list:

    docx4j-dev-subscribe@docx4java.org

Where do I get a binary?

http://www.docx4java.org/downloads.html

How do I get started?

See the Getting Started guide: https://github.com/plutext/docx4j/tree/master/docs

and the Cheat Sheet: http://www.docx4java.org/blog/2013/05/docx4j-in-a-single-page/

And see the sample code: https://github.com/plutext/docx4j/tree/master/src/samples

You’ll probably want the Helper AddIn to generate code: http://www.docx4java.org/blog/2016/05/docx4j-helper-word-addin-new-version-v3-3-0/

Where to get help?

http://www.docx4java.org/forums or StackOverflow (use tag ‘docx4j’)

Please post to one or the other, not both

Legal Information

docx4j is published under the Apache License version 2.0. For the license
text, please see the following files in the legals directory:

  • LICENSE
  • NOTICE
    Legal information on libraries used by docx4j can be found in the
    «legals/NOTICE» file.

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

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

Обзор библиотеки Apache POI - работа с приложениями пакета Microsoft Office в Java.

Apache POI — мощная библиотека для работы с различными документами пакета Microsoft Office на Java. Она включает API для чтения и создания новых документов Word, Excel, Visio, и работы с другими форматами файлов MS Office.

Интересный факт. Название библиотеки Apache POI является аббревиатурой от «Poor Obfuscation Implementation», что дословно переводится «Плохо Реализованная Обфускация» — это название было шуткой, придуманной программистами с хорошим чувством юмора, но позже оно стало официальным.

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

Чтобы работать с Apache POI, ее нужно включить проект вашей программы. Если Вы используете maven, то можете добавить следующий код в зависимости проекта (выбирайте стабильную версию):

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi</artifactId>

<version>3.14</version>

</dependency>

или же скачать ее на официальном сайте и вставить вручную.

При работе с библиотекой сразу бросаются в глаза необычные названия классов. Например, в классах для работы с Excel есть префикс HSSF: HSSFWorkbook, HSSFSheet и другие. Этот префикс HSSF расшифровывается как Horrible SpreadSheet Format или в переводе «Ужасный табличный формат»!

Давайте рассмотрим другие классы библиотеки Apache POI:

  1. Класс HSSF (Horrible Spreadsheet Format) используется для считывания и записи файлов Microsoft Excel формата xls.
  2. Класс XSSF (XML Spreadsheet Format) используется для считывания и записи файлов в формате Office Open XML (XLSX).
  3. Класс HPSF (Horrible Property Set Format) используется работы с базовой информацей о файлах пакета Microsoft Office.
  4. Класс HWPF (Horrible Word Processor Format) — для чтения и записи файлов приложения Microsoft Word 97 (формат .doc).
  5. Класс HSLF (Horrible Slide Layout Format) — для чтения и записи файлов приложения Microsoft PowerPoint.
  6. Класс HDGF (Horrible DiaGram Format) — для чтения и записи файлов приложения Microsoft Visio.
  7. Класс HPBF (Horrible PuBlisher Format) используется для работы с файлами Microsoft Publisher.
  8. Класс HSMF (Horrible Stupid Mail Format) используется для работы с файлами Microsoft Outlook MSG.
  9. Пакет DDF (Dreadful Drawing Format) используется для декодирования формата Microsoft Office Drawing.

Практика по Apache POI

Excel:

  • Здесь подробная статья с примером чтения данных из Excel файла форматов xls и xlsx.
  • Запись данных в xls файл (создание нового Excel документа).

Word:

  • Создание Word документа в формате docx с помощью Apache POI.
  • Считывание данных документа Word (колонтитулы, параграфы).

Автор оригинала: Nikita Masand.

В этой статье мы научимся читать и писать Microsoft Word с помощью библиотеки POI Apache .

Темы

  1. Apache POI – HWPF и XWPF
  2. Зависимости POI Apache
  3. Создайте документ word
  4. Работа с абзацами, шрифтами и страницей перерывы
  5. Верхний и нижний колонтитулы документа
  6. Добавить изображение
  7. Создайте таблицу
  8. Прочитайте и проанализируйте документ, абзац и таблицу
  9. Обновить документ

P.S Протестировано с Apache POI 4.1.2 и Java 8

1. Apache POI – HWPF и XWPF

Apache POI предоставляет API Java для работы с документами Microsoft. Мы рассмотрим варианты использования, включающие абзацы, шрифты, верхние и нижние колонтитулы, таблицы, изображения, запись, чтение, анализ и обновление документа. Прежде чем изучить варианты использования, давайте рассмотрим основные концепции, связанные с библиотекой POI Apache.

1.1 HWPF (ужасный формат текстового процессора) Эти API-интерфейсы предназначены для более старых форматов файлов Word 6 и Word 95, .doc документы.

1.2 XWPF (формат текстового процессора XML) Эти API предназначены для новых документов Word 2007, .docx .

Документ XWPFDocument Он предоставляет API-интерфейсы высокого уровня для создания / редактирования файлов .docx word
xwpfпараграф Он используется для работы с абзацами
XWPFRun Он определяет область текста с общим набором свойств. Он также используется для редактирования свойств шрифта
XWPFTable Он используется для описания содержимого компонента таблицы, присутствующего в файле word
XWPFTableRow Он определяет строки, присутствующие в компоненте таблицы
Xwpfвордэкстрактор Он используется для извлечения текста из файла word

P.S Эта статья будет посвящена последним XWPF API-интерфейсы, работа с .docx документы.

Нам нужен только poi-ooxml для работы с Microsoft word.

  
      org.apache.poi
      poi-ooxml
      4.1.2
  

3. Создайте документ word

В этом примере показано, как создать файл Microsoft Word .docx . Мы используем XWPFParagraph для создания абзацев и XWPFRun для создания текста.

package com.mkyong.poi.word;

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 java.io.FileOutputStream;
import java.io.IOException;

public class CreateDocumentSimple {

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

        String fileName = "c:\test\hello.docx";

        try (XWPFDocument doc = new XWPFDocument()) {

            // create a paragraph
            XWPFParagraph p1 = doc.createParagraph();
            p1.setAlignment(ParagraphAlignment.CENTER);

            // set font
            XWPFRun r1 = p1.createRun();
            r1.setBold(true);
            r1.setItalic(true);
            r1.setFontSize(22);
            r1.setFontFamily("New Roman");
            r1.setText("I am first paragraph.");

            // save it to .docx file
            try (FileOutputStream out = new FileOutputStream(fileName)) {
                doc.write(out);
            }

        }

    }
}

Выход

4. Работа с абзацами, шрифтами и разрывы страниц

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

Мы создаем четыре абзаца и устанавливаем различные свойства шрифта, разрывы строк и разрывы страниц для каждого из них.

package com.mkyong.poi.word;

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 java.io.FileOutputStream;
import java.io.IOException;

public class WorkingParagraphFonts {

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

        try (XWPFDocument doc = new XWPFDocument()) {

            XWPFParagraph p1 = doc.createParagraph();
            p1.setAlignment(ParagraphAlignment.CENTER);

            // Set Text to Bold and font size to 22 for first paragraph
            XWPFRun r1 = p1.createRun();
            r1.setBold(true);
            r1.setItalic(true);
            r1.setFontSize(22);
            r1.setText("I am first paragraph. My Text is bold, italic, Courier and capitalized");
            r1.setFontFamily("Courier");

            XWPFParagraph p2 = doc.createParagraph();
            //Set color for second paragraph
            XWPFRun r2 = p2.createRun();
            r2.setText("I am second paragraph. My Text is Red in color and is embossed");
            r2.setColor("ff0000");
            r2.setEmbossed(true);

            XWPFParagraph p3 = doc.createParagraph();
            //Set strike for third paragraph and capitalization
            XWPFRun r3 = p3.createRun();
            r3.setStrikeThrough(true);
            r3.setCapitalized(true);
            r3.setText("I am third paragraph. My Text is strike through and is capitalized");

            XWPFParagraph p4 = doc.createParagraph();
            p4.setWordWrapped(true);
            p4.setPageBreak(true);  // new page break
            p4.setIndentationFirstLine(600);

            XWPFRun r4 = p4.createRun();
            r4.setFontSize(40);
            r4.setItalic(true);
            //r4.setTextPosition(100);
            r4.setText("Line 1");
            r4.addBreak();
            r4.setText("Line 2");
            r4.addBreak();
            r4.setText("Line 3");

            // save the docs
            try (FileOutputStream out = new FileOutputStream("c:\test\simple.docx")) {
                doc.write(out);
            }

        }

    }

}

Рисунок: Страница 1

Рисунок: Страница 2

5. Верхний и нижний колонтитулы документа

В этом примере создается верхний и нижний колонтитулы документа для всех страниц.

Рисунок: Страница 1

Рисунок: Страница 2

6. Добавить изображение

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

7. Создайте таблицу

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

В этом примере вставляется таблица, содержащая 3 строки и 3 столбца.

P.S Предупреждение для OpenOffice 4.1.7, API-интерфейсы таблиц неправильно отформатировали таблицу.

8. Прочитайте и проанализируйте документ, абзац и таблицу.

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

8.1 Мы можем извлечь весь текст из документа с помощью XWPFWordExtractor . Файл simple.docx генерируется из примера 4. Работа с абзацами, шрифтами и разрывами страниц .

Вывод

8.2 В этом примере мы используем doc.getparagraphs() для списка абзацев документа. Как только мы получим список, мы сможем повторить отдельные элементы абзаца и получить текст.

8.3 Файл table.docx генерируется из примера 7. Создайте таблицу . Нам нужно получить список всех элементов в файле, а затем выполнить итерацию по нему, чтобы проверить наличие компонента ТАБЛИЦА . Как только мы найдем компонент ТАБЛИЦА , мы можем выполнить итерацию по нему, чтобы извлечь строки таблицы, и, наконец, выполнить итерацию по строкам, чтобы извлечь значения таблицы.

Вывод

9 . Обновить документ

В этом примере мы будем использовать предварительно заполненный файл шаблона template.docx . Файл шаблона содержит следующий текст Привет ${имя}, Поздравляю, вы учитесь чему-то новому! . И мы заменим строку ${имя} предопределенным вводом и создадим новый файл output.docx с обновленным содержимым.

Рисунок: c:testtemplate.docx

Вывод

Рисунок: c:testoutput.docx

Дальнейшее чтение Для получения дополнительных примеров, пожалуйста, обратитесь к этому официальному Примеры Apache POI XWPF

Скачать исходный код

$ клон git https://github.com/mkyong/apache-poi-examples/

$ cd word

Ссылки

  • Microsoft Word
  • Apache POI – Java API для обработки файлов Microsoft Word
  • Примеры XWPF Apache POI

| Идентификатор текущей записи загружено через JS |/автор комментарии

Оригинал: “https://mkyong.com/java/java-read-and-write-microsoft-word-with-apache-poi/”


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.

Like this post? Please share to your friends:
  • Библиотека шаблонов для word
  • Библиотека функций в excel для чего
  • Библиотека функций excel это
  • Библиотека функций excel если
  • Библиотека текстов для word