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
Будет сгенерирован следующий вывод:
I have a new app I’ll be working on where I have to generate a Word document that contains tables, graphs, a table of contents and text. What’s a good API to use for this? How sure are you that it supports graphs, ToCs, and tables? What are some hidden gotcha’s in using them?
Some clarifications:
- I can’t output a PDF, they want a Word doc.
- They’re using MS Word 2003 (or 2007), not OpenOffice
- Application is running on *nix app-server
It’d be nice if I could start with a template doc and just fill in some spaces with tables, graphs, etc.
Edit: Several good answers below, each with their own faults as far as my current situation. Hard to pick a «final answer» from them. Think I’ll leave it open, and hope for better solutions to be created.
Edit: The OpenOffice UNO project does seem to be closest to what I asked for. While POI is certainly more mainstream, it’s too immature for what I want.
asked Oct 14, 2008 at 23:09
billjamesdevbilljamesdev
14.5k6 gold badges53 silver badges76 bronze badges
4
In 2007 my project successfully used OpenOffice.org’s Universal Network Objects (UNO) interface to programmatically generate MS-Word compatible documents (*.doc), as well as corresponding PDF documents, from a Java Web application (a Struts/JSP framework).
OpenOffice UNO also lets you build MS-Office-compatible charts, spreadsheets, presentations, etc. We were able to dynamically build sophisticated Word documents, including charts and tables.
We simplified the process by using template MS-Word documents with bookmark inserts into which the software inserted content, however, you can build documents completely from scratch. The goal was to have the software generate report documents that could be shared and further tweaked by end-users before converting them to PDF for final delivery and archival.
You can optionally produce documents in OpenOffice formats if you want users to use OpenOffice instead of MS-Office. In our case the users want to use MS-Office tools.
UNO is included within the OpenOffice suite. We simply linked our Java app to UNO-related libraries within the suite. An OpenOffice Software Development Kit (SDK) is available containing example applications and the UNO Developer’s Guide.
I have not investigated whether the latest OpenOffice UNO can generate MS-Office 2007 Open XML document formats.
The important things about OpenOffice UNO are:
- It is freeware
- It supports multiple languages (e.g. Visual Basic, Java, C++, and others).
- It is platform-independent (Windows, Linux, Unix, etc.).
Here are some useful web sites:
- Open Office home
- Open Office UNO Developer’s Guide
- OpenOffice Developer’s Forum (especially the «Macros and API» and «Code Snippets» forums).
Lucky
16.6k19 gold badges117 silver badges151 bronze badges
answered Nov 2, 2008 at 16:05
1
I think Apache POI can do the job. A possible problem depending on the usage your aiming to may be caused by the fact that HWPF is still in early development.
HWPF
is the set of APIs for reading and
writing Microsoft Word 97(-XP)
documents using (only) Java.
answered Oct 14, 2008 at 23:17
Jorge FerreiraJorge Ferreira
95.4k25 gold badges120 silver badges132 bronze badges
4
You could use this:
http://code.google.com/p/java2word
I implemented this API called Java2Word. with a few lines of code, you can generate one Microsoft Word Document.
Eg.:
IDocument myDoc = new Document2004();
myDoc.getBody().addEle(new Heading1("Heading01"));
myDoc.getBody().addEle(new Paragraph("This is a paragraph...")
There is some examples how to use. Basically you will need one jar file.
Let me know if you need any further information how to set it up.
*I wrote this because we had one real necessity in a project. More in my blog:
http ://leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html
*
cheers
Leonardo
Edit : Project in link moved to https://github.com/leonardoanalista/java2word
Sai Kishore
3261 gold badge9 silver badges16 bronze badges
answered Jul 26, 2010 at 3:22
LeonardoLeonardo
1,0011 gold badge13 silver badges15 bronze badges
4
Try Aspose.Words for Java, it runs on any OS where Java is installed.
It will output the document to DOC, DOCX or RTF if you need an MS Word output format. All are supported equally well.
Using this API you can create a document from scratch, literally from nodes and set their formatting properties. You can also use a DocumentBuilder which provides higher level methods such as create a table row, insert a field etc. Or you can copy/join/move portions between existing pre created document, say you want to assemble a contract, just grab and copy pieces from several documents and Aspose.Words will merge styles, list formatting etc properly in the resulting document.
You will be able to insert a TOC field using Aspose.Words, but as of today, the TOC field will require a field update when the document is opened in Microsoft Word. However, we are going to release full support for TOC fields early in 2010. E.g. it will build complete TOC as MS Word does it.
I’m on the Aspose.Words team.
answered Dec 21, 2009 at 21:59
romeokromeok
6611 gold badge9 silver badges13 bronze badges
It was mentioned only briefly once, so I’d like to call out the docx4j library, as I’ve had more success with docx4j than anything else. Apache POI’s support for Word documents isn’t very good. Also, unlike Aspose.Words, docx4j is an open source library.
The only drawback is with docx4j you have to create Office Open XML (docx) format documents rather than OLE2-based (doc) format documents. This is the default format for Word 2007, but Word 2003 and earlier users will need to install a compatibility pack.
answered Feb 8, 2010 at 1:17
Try Aspose.Words for java.
Aspose.Words for Java is an advanced (commercial) class library for Java that enables you to perform a great range of document processing tasks directly within your Java applications.
Aspose.Words for Java supports DOC, OOXML, RTF, HTML and OpenDocument formats. With Aspose.Words you can generate, modify, and convert documents without using Microsoft Word.
Seki
11k7 gold badges47 silver badges68 bronze badges
answered Dec 8, 2008 at 10:57
I’ve used Aspose.Words to do mail merge in .NET. I believe that they also have a Java version.
answered Oct 14, 2008 at 23:26
tvanfossontvanfosson
521k98 gold badges699 silver badges794 bronze badges
You can use a Java COM bridge like JACOB. If it is from client side, another option would be to use Javascript.
answered Oct 14, 2008 at 23:17
Gulzar NazimGulzar Nazim
51.6k26 gold badges127 silver badges170 bronze badges
2
There’s a tool called JODConverter which hooks into open office to expose it’s file format converters, there’s versions available as a webapp (sits in tomcat) which you post to and a command line tool. I’ve been firing html at it and converting to .doc and pdf succesfully it’s in a fairly big project, haven’t gone live yet but I think I’m going to be using it.
http://sourceforge.net/projects/jodconverter/
answered Feb 9, 2009 at 19:11
Andrew HancoxAndrew Hancox
2,3301 gold badge20 silver badges28 bronze badges
docx4j or poi, both of which are ASL v2
@wondersofcomputing: iText is actually free and open source
answered Mar 27, 2009 at 2:52
JasonPlutextJasonPlutext
15.3k4 gold badges44 silver badges83 bronze badges
iText is really easy to use.
If you requiere doc files you can call abiword (free lightweigh multi-os text procesor) from the command line, it has several conversion format convert options.
After a little more research, I came across iText, a PDF and RTF-file creation API. I think I can use the RTF generation to create a Doc-readable file that can then be edited using Doc and re-saved.
Anyone have any experience with iText, used in this fashion?
Bill, the POI and iText API are very similar from a programming perspective. I’ve worked with both in the past and found them both easy to use and well documented.
With iText you gain the advantage of being able to switch between formats (RTF and PDF) with minor change to the code. If I remember correctly the content is laid out using the same calls and then set as PDF or RTF using a few lines of code.
However I believe the formatting in RTF is limited compared to DOC. I don’t know if you’ll be able to implement the advanced features you are looking for (tables, inline images) without a decent amount of hassle, if at all.
Given what you said that about HWPF not having enough functionality for your needs (I’ve only dealt with the Excel side of POI) your best bet may be to convince the powers that be that PDF is the best technology for the job.
answered May 4, 2009 at 16:24
James McMahonJames McMahon
48.2k64 gold badges206 silver badges280 bronze badges
I have developed pure XML based word files in the past. I used .NET, but the language should not matter since it’s truely XML. It was not the easiest thing to do (had a project that required it a couple years ago.) These do only work in Word 2007 or above — but all you need is Microsoft’s white paper that describe what each tag does. You can accomplish all you want with the tags the same way as if you were using Word (of course a little more painful initially.)
answered Oct 14, 2008 at 23:27
schmoopyschmoopy
6,29911 gold badges54 silver badges88 bronze badges
Yet another possibility, since this is a web app.
I was able to render an HTML page with the MIME type set to «application/msword», which caused the browser to spawn Word which imported the html just fine, allowing edits and saving just as if I’d output a real Word doc.
Tables work fine, but images I hadn’t gotten working yet. It may be as easy as just an tag in the HTML, or I may have to stream a separate part of the response containing the image data in binary, or some other method I haven’t come up with yet.
answered Oct 15, 2008 at 22:20
billjamesdevbilljamesdev
14.5k6 gold badges53 silver badges76 bronze badges
Even though this is much later than the request, it might help others. Docmosis provides a Java API for creating documents in doc,pdf,odt format using documents as templates. It uses OpenOffice as the engine to perform the format conversions. Document manipulation and population is performed by Docmosis itself.
answered May 16, 2010 at 3:40
Paul JowettPaul Jowett
6,4932 gold badges21 silver badges19 bronze badges
After a little more research, I came across iText, a PDF and RTF-file creation API. I think I can use the RTF generation to create a Doc-readable file that can then be edited using Doc and re-saved.
Anyone have any experience with iText, used in this fashion?
answered Oct 15, 2008 at 1:21
billjamesdevbilljamesdev
14.5k6 gold badges53 silver badges76 bronze badges
1
Java API for Various Document Formats
Aspose.Words for Java is an advanced Java Word processing API that enables you to perform a great range of document processing tasks directly within your Java applications. Aspose.Words for Java API supports processing word (DOC, DOCX, OOXML, RTF) HTML, OpenDocument, PDF, EPUB, XPS, SWF and all image formats. With Aspose.Words you can generate, modify, and convert documents without using Microsoft Word.
Directory | Description |
---|---|
Examples | A collection of Java examples that help you learn the product features. |
Plugins | Plugins that will demonstrate one or more features of Aspose.Words for Java. |
Word API Features
Rendering and Printing
- Layout document into pages with high fidelity (exactly like Microsoft Word® would do that) to all the formats below.
- Render individual pages or complete documents to
PDF
,XPS
, orSWF
. - Render document pages to raster images (Multipage
TIFF
,PNG
,JPEG
,BMP
). - Render pages to a Java Graphics object to a specific size.
- Print document pages using the Java printing infrastructure.
- Update TOC, page numbers, and other fields before rendering or printing.
- 3D Effects Rendering through the
OpenGL
.
Document Content Features
- Access, create, and modify various document elements.
- Access and modify all document elements using
XmlDocument
-like classes and methods. - Copy and move document elements between documents.
- Join and split documents.
- Specify document protection, open protected, and encrypted documents.
- Find and replace text, enumerate over document content.
- Preserve or extract OLE objects and ActiveX controls from the document.
- Preserve or remove VBA macros from the document. Preserve VBA macros digital signature.
Reporting Features
- Support of C# syntax and LINQ extension methods directly in templates (even for
ADO.NET
data sources). - Support of repeatable and conditional document blocks (loops and conditions) for tables, lists, and common content.
- Support of dynamically generated charts and images.
- Support of insertion of outer documents and
HTML
blocks into a document. - Support of multiple data sources (including of different types) for the generation of a single document.
- Built-in support of data relations (master-detail).
- Comprehensive support of various data manipulations such as grouping, sorting, filtering, and others directly in templates.
For a more comprehensive list of features, please visit Feature Overview.
Read & Write Document Formats
Microsoft Word: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM FlatOPC, FlatOpcMacroEnabled, FlatOpcTemplate, FlatOpcTemplateMacroEnabled
OpenOffice: ODT, OTT
WordprocessingML: WordML
Web: HTML, MHTML
Fixed Layout: PDF
Text: TXT
Other: MD
Save Word Files As
Fixed Layout: XPS, OpenXPS, PostScript (PS)
Images: TIFF, JPEG, PNG, BMP, SVG, EMF, GIF
Web: HtmlFixed
Others: PCL, EPUB, XamlFixed, XamlFlow, XamlFlowPack
Read File Formats
MS Office: DocPreWord60
eBook: MOBI
Supported Environments
- Microsoft Windows: Windows Desktop & Server (x86, x64)
- macOS: Mac OS X
- Linux: Ubuntu, OpenSUSE, CentOS, and others
- Java Versions:
J2SE 7.0 (1.7)
,J2SE 8.0 (1.8)
or above.
Get Started with Aspose.Words for Java
Aspose hosts all Java APIs at the Aspose Repository. You can easily use Aspose.Words for Java API directly in your Maven projects with simple configurations. For the detailed instructions please visit Installing Aspose.Words for Java from Maven Repository documentation page.
Printing Multiple Pages on One Sheet using Java
// Open the document. Document doc = new Document(dataDir + "TestFile.doc"); // Create a print job to print our document with. PrinterJob pj = PrinterJob.getPrinterJob(); // Initialize an attribute set with the number of pages in the document. PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet(); attributes.add(new PageRanges(1, doc.getPageCount())); // Pass the printer settings along with the other parameters to the print document. MultipagePrintDocument awPrintDoc = new MultipagePrintDocument(doc, 4, true, attributes); // Pass the document to be printed using the print job. pj.setPrintable(awPrintDoc); pj.print();
Product Page | Docs | Demos | API Reference | Examples | Blog | Search | Free Support | Temporary License