Джава что такое word

A Word file is supposed to be created without Word with the help of Java application protocol interfaces.

Concepts Involved: Apache POI and Maven

Apache POI Is an API provided by Apache foundation which is a collection of different java libraries. This facility gives the library to read, write, and manipulate different Microsoft files such as Excel sheets, PowerPoint, and Word files. There are two types basically older version including ‘.doc’, ‘.ppt’ while newer versions of files as ‘.docx’, ‘.pptx’. There are two ways to deal with Apache POI as mentioned below:

Binary Distribution  Source Distribution 
No compilation is required to generate file.jar files  Files to generated needs to be compiled in order to generate file.jar files 
If working with Linux go for the ‘.tar.gz’ version (version 3.5 backward) otherwise simply download the .zip. the file extension for installation to work on Apache POI.  Here format does not matter because file is not compiled so can be altered as per need 

Here zip file is taken for consideration and also if the operating system is Windows, zip files should be preferred. It is a simple java project so binary distribution API is used. In the process of creating the document, several paragraphs will be inserted as a sample to display output and will be providing styles to paragraphs such as font color, font name, and font size. 

Now in order to create a Word file without using Microsoft Word, there is a java interface called Spire and if there is a need to create a PDF document without using Adobe Acrobat then it can be done with the use of an interface known as ‘E-Ice blue’. Here ‘Spire.doc’ must have to be imported as per problem statement as all dealing is in word format.

Spire.Doc for Java is a professional Java Word API that enables Java applications to create, convert, manipulate, and print Word documents without using Microsoft Office. It will be imported as a reference for this program as a reference. 

Syntax: For importing libraries in java of Spire

import Spire.Doc.jar ;

Components Of Spire involved are as follows:

Component Responsibility
XML Word Processor Format (XWPF) Reading and writing in ‘docx’ extensions files of MS-Word
Horrible Word Processor Format (HWPF) Reading and writing in ‘doc’ extensions files of MS-Word 

Additionally, there is another Java API for PDF format as discussed above ‘E-Ice Blue’ that enables developers to read, write, convert, and print PDF documents in Java applications without using Adobe Acrobat. Similarly, a PowerPoint API allows developers to create, read, edit, convert, and print PowerPoint files within Java applications.

If user is creating shear Maven project, one can easily add the jar dependency by adding the following configurations to the pom.xml.

Now, just like any class Apache POI contains classes and methods to work on. Major components of Apache POI are discussed below to understand the internal working of a file, how it is been generated without Word with help of classes and methods. There are basically two versions of files been present in Word itself.

Older files extensions Newer file extension (Version 3.5)
doc docx 
xls xlsx
ppt pptx

Maven 

These files are accessed using Maven. Maven is a powerful project management tool that is based on POM (project object model). It is used for projects to build, dependency, and documentation. It simplifies the build process like ANT. But it is too much advanced than ANT.
In short terms we can tell maven is a tool that can be used for building and managing any Java-based project. Maven makes the day-to-day work of Java developers easier and generally help with the comprehension of any Java-based project.

Maven does have some specific commands to deal with files. Most frequently used are:

poi + poi + scratchpadpoi    // In order to deal with older Word file versions 
poi + poi-ooxml              // In order to deal with new Word file versions

Implementation: Below program depicts the responsibility of Spire API in creating a Word file:

Java

import com.spire.doc.Document;

import com.spire.doc.FileFormat;

import com.spire.doc.Section;

import com.spire.doc.documents.BuiltinStyle;

import com.spire.doc.documents.Paragraph;

import com.spire.doc.documents.ParagraphStyle;

class GFG {

    public static void main(String[] args)

    {

        Document document = new Document();

        Section section = document.addSection();

        Paragraph heading = section.addParagraph();

        heading.appendText("Java");

        Paragraph subheading_1 = section.addParagraph();

        subheading_1.appendText("What's Java");

        Paragraph para_1 = section.addParagraph();

        para_1.appendText(

            "Java is a general purpose, high-level programming language developed by Sun Microsystems."

            + " The Java programming language was developed by a small team of engineers, "

            + "known as the Green Team, who initiated the language in 1991.");

        Paragraph para_2 = section.addParagraph();

        para_2.appendText(

            "Originally called OAK, the Java language was designed for handheld devices and set-top boxes. "

            + "Oak was unsuccessful and in 1995 Sun changed the name to Java and modified the language to take "

            + "advantage of the burgeoning World Wide Web. ");

        Paragraph subheading_2 = section.addParagraph();

        subheading_2.appendText("Java Today");

        Paragraph para_3 = section.addParagraph();

        para_3.appendText(

            "Today the Java platform is a commonly used foundation for developing and delivering content "

            + "on the web. According to Oracle, there are more than 9 million Java developers worldwide and more "

            + "than 3 billion mobile phones run Java.");

        heading.applyStyle(BuiltinStyle.Title);

        subheading_1.applyStyle(BuiltinStyle.Heading_3);

        subheading_2.applyStyle(BuiltinStyle.Heading_3);

        ParagraphStyle style = new ParagraphStyle(document);

        style.setName("paraStyle");

        style.getCharacterFormat().setFontName("Arial");

        style.getCharacterFormat().setFontSize(11f);

        document.getStyles().add(style);

        para_1.applyStyle("paraStyle");

        para_2.applyStyle("paraStyle");

        para_3.applyStyle("paraStyle");

        for (int i = 0;

             i < section.getParagraphs().getCount(); i++) {

            section.getParagraphs()

                .get(i)

                .getFormat()

                .setAfterAutoSpacing(true);

        }

        document.saveToFile(

            "output/CreateAWordDocument.docx",

            FileFormat.Docx);

    }

}

Output:

Apache POI Word – Обзор

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

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

Что такое Apache POI?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

> Java-версия

Java версия “1.7.0_60”

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

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

Linux

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

$ java – версия

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

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

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

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

> Java-версия

Java версия “1.7.0_60”

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

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

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

$ java – версия

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Jar Hierarchy1

Jar Hierarchy2

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

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

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

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

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

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

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

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

Linux

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Документ

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

XWPFDocument

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

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

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

совершить ()

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

2

createParagraph ()

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

3

CreateTable ()

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

4

createTOC ()

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

5

getParagraphs ()

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

6

GetStyle ()

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

совершить ()

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

createParagraph ()

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

CreateTable ()

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

createTOC ()

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

getParagraphs ()

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

GetStyle ()

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

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

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

XWPFParagraph

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

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

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

createRun ()

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

2

getAlignment ()

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

3

setAlignment (ParagraphAlignment align)

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

4

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

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

5

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

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

6

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

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

7

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

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

createRun ()

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

getAlignment ()

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

setAlignment (ParagraphAlignment align)

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

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

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

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

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

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

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

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

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

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

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

XWPFRun

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

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

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

addBreak ()

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

2

addTab ()

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

3

setColor (java.lang.String rgbStr)

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

4

setFontSize (int size)

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

5

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

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

6

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

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

addBreak ()

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

addTab ()

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

setColor (java.lang.String rgbStr)

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

setFontSize (int size)

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

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

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

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

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

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

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

XWPFStyle

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

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

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

getNextStyleID ()

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

2

getStyleId ()

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

3

getStyles ()

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

4

setStyleId (java.lang.String styleId)

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

getNextStyleID ()

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

getStyleId ()

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

getStyles ()

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

setStyleId (java.lang.String styleId)

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

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

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

XWPFTable

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

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

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

addNewCol ()

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

2

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

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

3

createRow ()

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

4

setWidth (int width)

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

addNewCol ()

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

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

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

createRow ()

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

setWidth (int width)

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

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

XWPFWordExtractor

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

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

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

GetText ()

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

GetText ()

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

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

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

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

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

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

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

public class CreateDocument {

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

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

$javac  CreateDocument.java
$java CreateDocument

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

createdocument.docx written successfully

Apache POI Word – пункт

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

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

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

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

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

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

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

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

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

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

XWPFRun run = paragraph.createRun();

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

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

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

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

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

public class CreateParagraph {

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

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

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

$javac CreateParagraph.java
$java CreateParagraph

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

createparagraph.docx written successfully

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

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

Apache POI Word – Границы

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

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

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

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

public class ApplyingBorder {

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

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

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

$javac ApplyingBorder.java
$java ApplyingBorder

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

applyingborder.docx written successfully

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

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

Apache POI Word – Таблицы

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

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

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

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

public class CreateTable {

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

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

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

$javac CreateTable.java
$java CreateTable

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

createtable.docx written successfully

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

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

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

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

Стиль шрифта

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

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

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

public class FontStyle {

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

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

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

$javac FontStyle.java
$java FontStyle

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

fontstyle.docx written successfully

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

Стиль шрифта

центровка

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

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

public class AlignParagraph {

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

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

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

$javac AlignParagraph.java
$java AlignParagraph

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

alignparagraph.docx written successfully

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

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

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

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

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

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

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

public class WordExtractor {

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

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

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

$javac WordExtractor.java
$java WordExtractor

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

В моей недавней работе мне нужно было сгенерировать документ Word в программе на Java. После поиска в Интернете и тестирования я успешно решил эту проблему. Сегодня я расскажу вам, как я использую Free Spire.Doc for Java для создания документов Word в приложениях Java, вставки в них изображений и форматирования абзацев.

Конфигурация среды

Установите пакет jar через репозиторий Maven, и код для настройки файла pom.xml выглядит следующим образом:

<repositories>
     <repository>
          <id>com.e-iceblue</id>
          <name>e-iceblue</name>
          <url>http://repo.e-iceblue.com/nexus/content/groups/public/</url>
     </repository>
</repositories>
<dependencies>
     <dependency>
          <groupId>e-iceblue</groupId>
          <artifactId>spire.doc.free</artifactId>
          <version>2.7.3</version>
     </dependency>
</dependencies>

Код Java

import com.spire.doc.*;
import com.spire.doc.documents.HorizontalAlignment;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.ParagraphStyle;
import com.spire.doc.fields.DocPicture;

import java.awt.*;

public class CreateWordDocument {
    public static void main(String[] args){
        //Создать документ Word
        Document document = new Document();

        //Добавить раздел
        Section section = document.addSection();

        //Добавить 4 абзаца в раздел
        Paragraph para1 = section.addParagraph();
        para1.appendText("Земля́");

        Paragraph para2 = section.addParagraph();
        para2.appendText("третья по удалённости от Солнца планета Солнечной системы. "+
                "Самая плотная, пятая по диаметру и массе среди всех планет и крупнейшая среди планет земной группы, в которую входят также Меркурий, Венера и Марс. "+
                "Единственное известное человеку в настоящее время тело Солнечной системы в частности и Вселенной вообще, населённое живыми организмами.");

        Paragraph para3 = section.addParagraph();
        para3.appendText("В публицистике и научно-популярной литературе могут использоваться синонимические термины — "+
                "мир, голубая планета");

        //Добавьте картинки в абзац 4
        Paragraph para4 = section.addParagraph();
        DocPicture picture = para4.appendPicture("pic2.jpg");
        //Установить ширину изображения
        picture.setWidth(300f);
        //Установить высоту изображения
        picture.setHeight(250f);

        //Используйте первый абзац в качестве заголовка и отформатируйте заголовок
        ParagraphStyle style1 = new ParagraphStyle(document);
        style1.setName("titleStyle");
        style1.getCharacterFormat().setBold(true);
        style1.getCharacterFormat().setTextColor(Color.BLUE);
        style1.getCharacterFormat().setFontName("Arial");
        style1.getCharacterFormat().setFontSize(12f);
        document.getStyles().add(style1);
        para1.applyStyle("titleStyle");

        //Установите формат абзацев 2 и 3
        ParagraphStyle style2 = new ParagraphStyle(document);
        style2.setName("paraStyle");
        style2.getCharacterFormat().setFontName("Arial");
        style2.getCharacterFormat().setFontSize(11f);
        document.getStyles().add(style2);
        para2.applyStyle("paraStyle");
        para3.applyStyle("paraStyle");

        //Установите абзац 1 и абзац 4 для выравнивания по центру по горизонтали
        para1.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
        para4.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);

        //Установите отступ начала второго и третьего абзацев
        para2.getFormat().setFirstLineIndent(25f);
        para3.getFormat().setFirstLineIndent(25f);

        //Установите пробел после абзаца 1, 2 и 3
        para1.getFormat().setAfterSpacing(15f);
        para2.getFormat().setAfterSpacing(10f);
        para3.getFormat().setAfterSpacing(10f);

        //Сохраните документ
        document.saveToFile("Word Document.docx", FileFormat.Docx);
    }
}

image


1. Обзор

Apache POI

— это библиотека Java для работы с различными форматами файлов на основе стандартов Office Open XML (OOXML) и формата Microsoft OLE 2 Compound Document (OLE2).

В этом руководстве рассматривается поддержка

Apache POI для Microsoft Word

, наиболее часто используемого формата файлов Office. В нем рассматриваются шаги, необходимые для форматирования и создания файла MS Word, и способы синтаксического анализа этого файла.


2. Зависимости Maven

Единственная зависимость, которая требуется для Apache POI для обработки файлов MS Word:

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

Пожалуйста, нажмите

here

для последней версия этого артефакта.


3. Подготовка

Давайте теперь рассмотрим некоторые элементы, используемые для облегчения создания файла MS Word.


3.1. Файлы ресурсов

Мы соберем содержимое трех текстовых файлов и запишем их в файл MS Word с именем

rest-with-spring.docx

.

Кроме того, файл

logo-leaf.png

используется для вставки изображения в этот новый файл. Все эти файлы существуют в пути к классам и представлены несколькими статическими переменными:

public static String logo = "logo-leaf.png";
public static String paragraph1 = "poi-word-para1.txt";
public static String paragraph2 = "poi-word-para2.txt";
public static String paragraph3 = "poi-word-para3.txt";
public static String output = "rest-with-spring.docx";

Для тех, кому интересно, содержимое этих файлов ресурсов в репозитории, чья ссылка приведена в последнем разделе этого урока, извлечено из ссылки:/rest-with-spring-course? Utm__source = blog


3.2. Вспомогательный метод

Основной метод, состоящий из логики, используемой для создания файла MS Word, который описан в следующем разделе, использует вспомогательный метод:

public String convertTextFileToString(String fileName) {
    try (Stream<String> stream
      = Files.lines(Paths.get(ClassLoader.getSystemResource(fileName).toURI()))) {

        return stream.collect(Collectors.joining(" "));
    } catch (IOException | URISyntaxException e) {
        return null;
    }
}

Этот метод извлекает содержимое, содержащееся в текстовом файле, расположенном в пути к классам, имя которого является переданным аргументом

String

. Затем он объединяет строки в этом файле и возвращает присоединяющуюся

String

.


4. Создание файлов MS Word

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

XWPFDocument

XWPFDocument document = new XWPFDocument();


4.1. Форматирование заголовка и субтитров

Чтобы создать заголовок, нам нужно сначала создать экземпляр класса

XWPFParagraph

и установить выравнивание для нового объекта:

XWPFParagraph title = document.createParagraph();
title.setAlignment(ParagraphAlignment.CENTER);

Содержимое абзаца должно быть заключено в объект

XWPFRun

.

Мы можем настроить этот объект, чтобы установить текстовое значение и связанные с ним стили:

XWPFRun titleRun = title.createRun();
titleRun.setText("Build Your REST API with Spring");
titleRun.setColor("009933");
titleRun.setBold(true);
titleRun.setFontFamily("Courier");
titleRun.setFontSize(20);

Нужно уметь определять цели set-методов из их имен.

Аналогичным образом мы создаем экземпляр

XWPFParagraph

, содержащий субтитры:

XWPFParagraph subTitle = document.createParagraph();
subTitle.setAlignment(ParagraphAlignment.CENTER);

Давайте также отформатируем субтитры:

XWPFRun subTitleRun = subTitle.createRun();
subTitleRun.setText("from HTTP fundamentals to API Mastery");
subTitleRun.setColor("00CC44");
subTitleRun.setFontFamily("Courier");
subTitleRun.setFontSize(16);
subTitleRun.setTextPosition(20);
subTitleRun.setUnderline(UnderlinePatterns.DOT__DOT__DASH);

Метод

setTextPosition

устанавливает расстояние между субтитрами и последующим изображением, а

setUnderline

определяет шаблон подчеркивания.

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


4.2. Вставка изображения

Изображение также необходимо обернуть в экземпляр

XWPFParagraph

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

XWPFParagraph image = document.createParagraph();
image.setAlignment(ParagraphAlignment.CENTER);

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

XWPFRun imageRun = image.createRun();
imageRun.setTextPosition(20);

Изображение берется из файла на пути к классам, а затем вставляется в файл MS Word с указанными размерами:

Path imagePath = Paths.get(ClassLoader.getSystemResource(logo).toURI());
imageRun.addPicture(Files.newInputStream(imagePath),
  XWPFDocument.PICTURE__TYPE__PNG, imagePath.getFileName().toString(),
  Units.toEMU(50), Units.toEMU(50));


4.3. Форматирование абзацев

Вот как мы создаем первый абзац с содержимым, взятым из файла

poi-word-para1.txt

:

XWPFParagraph para1 = document.createParagraph();
para1.setAlignment(ParagraphAlignment.BOTH);
String string1 = convertTextFileToString(paragraph1);
XWPFRun para1Run = para1.createRun();
para1Run.setText(string1);

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

Аналогичным образом мы можем создать два других абзаца, используя содержимое файлов

poi-word-para2.txt

и

poi-word-para3.txt

:

XWPFParagraph para2 = document.createParagraph();
para2.setAlignment(ParagraphAlignment.RIGHT);
String string2 = convertTextFileToString(paragraph2);
XWPFRun para2Run = para2.createRun();
para2Run.setText(string2);
para2Run.setItalic(true);

XWPFParagraph para3 = document.createParagraph();
para3.setAlignment(ParagraphAlignment.LEFT);
String string3 = convertTextFileToString(paragraph3);
XWPFRun para3Run = para3.createRun();
para3Run.setText(string3);

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


4.4. Создание файла MS Word

Теперь мы готовы записать файл Microsoft Word в память из переменной

document

:

FileOutputStream out = new FileOutputStream(output);
document.write(out);
out.close();
document.close();

Все фрагменты кода в этом разделе обернуты в метод с именем

handleSimpleDoc

.


5. Разбор и тестирование

В этом разделе описывается разбор файлов MS Word и проверка результата.


5.1. Подготовка

Мы объявляем статическое поле в тестовом классе:

static WordDocument wordDocument;

Это поле используется для ссылки на экземпляр класса, который включает в себя все фрагменты кода, показанные в разделах 3 и 4.

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

rest-with-spring.docx

в текущем рабочем каталоге, вызвав метод

handleSimpleDoc

:

@BeforeClass
public static void generateMSWordFile() throws Exception {
    WordTest.wordDocument = new WordDocument();
    wordDocument.handleSimpleDoc();
}

Давайте перейдем к последнему шагу: анализ файла MS Word и проверка результата.


5.2. Разбор файла MS Word и проверка

Сначала мы извлекаем содержимое из указанного файла MS Word в каталоге проекта и сохраняем содержимое в

List

из

XWPFParagraph

:

Path msWordPath = Paths.get(WordDocument.output);
XWPFDocument document = new XWPFDocument(Files.newInputStream(msWordPath));
List<XWPFParagraph> paragraphs = document.getParagraphs();
document.close();

Далее, давайте удостоверимся, что содержание и стиль заголовка такой же, как мы установили ранее:

XWPFParagraph title = paragraphs.get(0);
XWPFRun titleRun = title.getRuns().get(0);

assertEquals("Build Your REST API with Spring", title.getText());
assertEquals("009933", titleRun.getColor());
assertTrue(titleRun.isBold());
assertEquals("Courier", titleRun.getFontFamily());
assertEquals(20, titleRun.getFontSize());

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

assertEquals("from HTTP fundamentals to API Mastery",
  paragraphs.get(1).getText());
assertEquals("What makes a good API?", paragraphs.get(3).getText());
assertEquals(wordDocument.convertTextFileToString
  (WordDocument.paragraph1), paragraphs.get(4).getText());
assertEquals(wordDocument.convertTextFileToString
  (WordDocument.paragraph2), paragraphs.get(5).getText());
assertEquals(wordDocument.convertTextFileToString
  (WordDocument.paragraph3), paragraphs.get(6).getText());

Теперь мы можем быть уверены, что создание файла

rest-with-spring.docx

прошло успешно.


6. Заключение

В этом руководстве была представлена ​​поддержка Apache POI для формата Microsoft Word. Он прошел шаги, необходимые для создания файла MS Word и проверки его содержимого.

Реализация всех этих примеров и фрагментов кода может быть найдена в

a проекте GitHub

.

Only Spire.Doc for Java, No Microsoft Office

Spire.Doc for Java is a totally independent Word component, Microsoft Office is not required in order to use Spire.Doc for Java.

High Quality File Conversion

Spire.Doc for Java allows converting popular file formats like HTML, RTF, ODT, TXT, WordML, WordXML to Word and exporting Word to commonly used file formats such as PDF, XPS, Image, EPUB, HTML, TXT, ODT, RTF, WordML, WordXML in high quality. Moreover, conversion between Doc and Docx is supported as well.

Support a Rich Set of Word Elements

Spire.Doc for Java supports a rich set of Word elements, including section, header, footer, footnote, endnote, paragraph, list, table, text, TOC, form field, mail merge, hyperlink, bookmark, watermark, image, style, shape, textbox, ole, WordArt, background settings, digital signature, document encryption and many more.

Понравилась статья? Поделить с друзьями:
  • Дефлектор расчет в excel
  • Дефектовочная ведомость образец excel
  • Дефектный акт образец скачать word
  • Дефектная ведомость образец скачать word
  • Дефектная ведомость образец в строительстве excel скачать