Время на прочтение
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.
На следующих рисунках показаны каталоги и файловая структура внутри загруженной папки:
Добавьте полный путь к пяти банкам, как показано на изображении выше, к 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. Она включает 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:
- Класс
HSSF (Horrible Spreadsheet Format)
используется для считывания и записи файлов Microsoft Excel формата xls. - Класс
XSSF (XML Spreadsheet Format)
используется для считывания и записи файлов в формате Office Open XML (XLSX). - Класс
HPSF (Horrible Property Set Format)
используется работы с базовой информацей о файлах пакета Microsoft Office. - Класс
HWPF (Horrible Word Processor Format)
— для чтения и записи файлов приложения Microsoft Word 97 (формат .doc). - Класс
HSLF (Horrible Slide Layout Format)
— для чтения и записи файлов приложения Microsoft PowerPoint. - Класс
HDGF (Horrible DiaGram Format)
— для чтения и записи файлов приложения Microsoft Visio. - Класс
HPBF (Horrible PuBlisher Format)
используется для работы с файлами Microsoft Publisher. - Класс
HSMF (Horrible Stupid Mail Format)
используется для работы с файлами Microsoft Outlook MSG. - Пакет
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 .
Темы
- Apache POI – HWPF и XWPF
- Зависимости POI Apache
- Создайте документ word
- Работа с абзацами, шрифтами и страницей перерывы
- Верхний и нижний колонтитулы документа
- Добавить изображение
- Создайте таблицу
- Прочитайте и проанализируйте документ, абзац и таблицу
- Обновить документ
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.
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 −
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 −
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.
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 −
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.