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 Compound MS-Office. Список компонентов этого API приведен ниже -
POIFS (Poor Obfuscation Implementation File System)- Этот компонент является основным фактором всех других элементов POI. Он используется для явного чтения разных файлов.
HSSF (Horrible SpreadSheet Format) - Используется для чтения и записи файлов MS-Excel в формате .xls.
XSSF (XML SpreadSheet Format) - Используется для файлов формата .xlsx MS-Excel.
HPSF (Horrible Property Set Format) - Он используется для извлечения наборов свойств файлов MS-Office.
HWPF (Horrible Word Processor Format) - Он используется для чтения и записи файлов расширения .doc MS-Word.
XWPF (XML Word Processor Format) - Используется для чтения и записи .docx файлы расширения MS-Word.
HSLF (Horrible Slide Layout Format) - Он используется для чтения, создания и редактирования презентаций PowerPoint.
HDGF (Horrible DiaGram Format) - Он содержит классы и методы для двоичных файлов MS-Visio.
HPBF (Horrible PuBlisher Format) - Используется для чтения и записи файлов MS-Publisher.
Это руководство проведет вас через процесс работы с файлами MS-Word с использованием Java. Поэтому обсуждение ограничивается компонентами HWPF и XWPF.
Note- СТАРЫЕ ВЕРСИИ POI ПОДДЕРЖИВАЮТ ДВОИЧНЫЕ ФОРМАТЫ ФАЙЛОВ, ТАКИЕ КАК DOC, XLS, PPT, ETC. ВЕРСИЯ 3.5 ДАЛЬНЕЙШЕЕ, POI ПОДДЕРЖИВАЕТ ФОРМАТЫ ФАЙЛОВ OOXML MS-OFFICE, ТАКИЕ КАК DOCX, XLSX, PPTX и т. Д.
В этой главе вы узнаете, как настроить 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 –version |
Версия Java "1.7.0_60" Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19) 64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 24.60-b09, смешанный режим) |
Linux | Откройте командный терминал и введите - $java –version |
версия 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 и установить его.
Шаг 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.
На следующих изображениях показаны каталоги и файловая структура внутри загруженной папки -
Добавьте полный путь из пяти jars как показано на изображении выше КЛАССА.
Платформа | Описание |
---|---|
Windows | Добавьте следующие строки в конец пользовательской переменной CLASSPATH - «C: \ poi-3.9 \ poi-3.9-20121203.jar;» «C: \ poi-3.9 \ poi-ooxml-3.9-20121203.jar;» «C: \ poi-3.9 \ poi-ooxml-schemas-3.9-20121203.jar;» «C: \ poi-3.9 \ ooxml-lib \ dom4j-1.6.1.jar;» «C: \ poi-3.9 \ ooxml-lib \ 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 |
В этой главе вы познакомитесь с классами и методами Apache POI для управления документом Word.
Документ
Это интерфейс маркера (интерфейс не содержит никаких методов), который уведомляет, что реализованный класс может создавать текстовый документ.
XWPFDocument
Это класс под org.apache.poi.xwpf.usermodelпакет. Он используется для создания документа MS-Word с форматом файла .docx.
Методы класса
Sr. No. | Метод и описание |
---|---|
1 | commit() Фиксирует и сохраняет документ. |
2 | createParagraph() Добавляет в этот документ новый абзац. |
3 | createTable() Создает пустую таблицу с одной строкой и одним столбцом по умолчанию. |
4 | createTOC() Создает оглавление для документа Word. |
5 | getParagraphs() Возвращает абзацы, содержащие текст верхнего или нижнего колонтитула. |
6 | getStyle() Возвращает используемый объект стилей. |
Для остальных методов этого класса см. Полный документ API по адресу -
Пакет org.apache.poi.openxml4j.opc.internal .
XWPFПараграф
Это класс под org.apache.poi.xwpf.usermodelпакет и используется для создания абзаца в текстовом документе. Этот экземпляр также используется для добавления всех типов элементов в текстовый документ.
Методы класса
Sr. No. | Метод и описание |
---|---|
1 | createRun() Добавляет новый пробег к этому абзацу. |
2 | getAlignment() Возвращает выравнивание абзаца, которое должно быть применено к тексту в этом абзаце. |
3 | setAlignment(ParagraphAlignment align) Задает выравнивание абзаца, которое должно применяться к тексту в этом абзаце. |
4 | setBorderBottom(Borders border) Определяет границу, которая должна отображаться под набором абзацев, которые имеют одинаковый набор настроек границы абзаца. |
5 | setBorderLeft(Borders border) Определяет границу, которая должна отображаться в левой части страницы вокруг указанного абзаца. |
6 | setBorderRight(Borders border) Определяет границу, которая должна отображаться с правой стороны страницы вокруг указанного абзаца. |
7 | setBorderTop(Borders border) Определяет границу, которая должна отображаться над набором абзацев с одинаковым набором настроек границы абзаца. |
Для остальных методов этого класса см. Полный документ API по адресу -
Документация по API POI
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 value) Устанавливает текст этого текста. |
6 | setBold(boolean value) Определяет, будет ли свойство жирного шрифта применяться ко всем несложным символам сценария в содержимом этого прогона при отображении в документе. |
Для остальных методов этого класса см. Полный документ API по адресу -
Документация по API POI
XWPFStyle
Это класс под org.apache.poi.xwpf.usermodel пакет и используется для добавления различных стилей к элементам объекта в текстовом документе.
Методы класса
Sr. No. | Метод и описание |
---|---|
1 | getNextStyleID() Он используется для получения StyleID следующего стиля. |
2 | getStyleId() Он используется для получения StyleID стиля. |
3 | getStyles() Он используется для получения стилей. |
4 | setStyleId(java.lang.String styleId) Он используется для установки styleID. |
Для остальных методов этого класса см. Полный документ API по адресу -
Документация по API POI
XWPFTable
Это класс под org.apache.poi.xwpf.usermodel пакет и используется для добавления табличных данных в текстовый документ.
Методы класса
Sr. No. | Метод и описание |
---|---|
1 | addNewCol() Добавляет новый столбец для каждой строки в этой таблице. |
2 | addRow(XWPFTableRow row, int pos) Добавляет новую строку в таблицу в позиции pos. |
3 | createRow() Создает новый объект XWPFTableRow с количеством ячеек, равным количеству столбцов, определенных в этот момент. |
4 | setWidth(int width) Устанавливает ширину столбца. |
Для остальных методов этого класса см. Полный документ API по адресу: POI API Documentation
XWPFWordExtractor
Это класс под org.apache.poi.xwpf.extractorпакет. Это базовый класс парсера, используемый для извлечения простого текста из документа Word.
Методы класса
Sr. No. | Метод и описание |
---|---|
1 | getText() Извлекает весь текст из документа. |
Для остальных методов этого класса см. Полный документ API по адресу: POI API Documentation
Здесь термин «документ» относится к файлу 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 с именем createdocument.docx в вашем текущем каталоге и отобразите следующий вывод в командной строке -
createdocument.docx written successfully
В этой главе вы узнаете, как создать абзац и как добавить его в документ с помощью Java. Абзац - это часть страницы в файле Word.
После завершения этой главы вы сможете создать абзац и выполнять с ним операции чтения.
Создать абзац
Прежде всего, давайте создадим абзац, используя классы, на которые есть ссылки, которые обсуждались в предыдущих главах. Следуя предыдущей главе, сначала создайте документ, а затем мы сможем создать абзац.
Следующий фрагмент кода используется для создания электронной таблицы -
//Create Blank document
XWPFDocument document = new XWPFDocument();
//Create a blank spreadsheet
XWPFParagraph paragraph = document.createParagraph();
Выполнить по абзацу
Вы можете ввести текст или любой элемент объекта, используя Run. Используя экземпляр Paragraph, вы можете создатьrun.
Следующий фрагмент кода используется для создания 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 файл выглядит следующим образом.
В этой главе вы узнаете, как применить рамку к абзацу с помощью программирования на 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 с именем applyingborder.docx в вашем текущем каталоге и отобразите следующий вывод -
applyingborder.docx written successfully
В applyingborder.docx файл выглядит следующим образом -
В этой главе вы узнаете, как создать таблицу данных в документе. Вы можете создать данные таблицы, используяXWPFTableкласс. Добавляя каждыйRow в таблицу и добавляя каждый cell к Row, вы получите данные таблицы.
Создать таблицу
Следующий код используется для создания таблицы в документе -
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 файл выглядит следующим образом -
В этой главе показано, как применять различные стили шрифтов и выравнивания в документе 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 файл выглядит следующим образом -
В этой главе объясняется, как извлечь простые текстовые данные из документа 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
Он выдаст следующий результат:
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.