Как создать простой редактор документов в Maven Java?

Вопрос или проблема

Я знаю, что это более сложный вопрос, и поэтому я не прошу загрузить всю кодовую базу. Я спрашиваю о том, какие библиотеки использовать. Мне стоит использовать JavaFX, ApachePOI? Мне также любопытно, как я могу достичь отображения содержимого файла с сохранением форматирования.

Вот мой текущий pom.xml, чтобы показать, что я сейчас пытаюсь использовать:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.debate</groupId>
    <artifactId>DocumentEditor</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <javafx.version>17.0.1</javafx.version> <!-- Определите версию JavaFX здесь -->
    </properties>

    <dependencies>
        <!-- Apache POI для работы с .docx файлами -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.0</version>
        </dependency>
        
        <!-- ODFDOM для работы с .odt файлами -->
        <dependency>
            <groupId>org.odftoolkit</groupId>
            <artifactId>odfdom-java</artifactId>
            <version>0.8.7</version>
        </dependency>
        
        <!-- PDFBox для работы с .pdf файлами -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.24</version>
        </dependency>
        
        <!-- Groovy XML -->
        <dependency>
            <groupId>org.apache.groovy</groupId>
            <artifactId>groovy-xml</artifactId>
            <version>5.0.0-alpha-10</version>
        </dependency>

        <!-- JUnit для тестирования -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope> <!-- Сделать JUnit зависимостью для тестирования -->
        </dependency>

        <!-- JavaFX controls -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>${javafx.version}</version>
        </dependency>

        <!-- JavaFX FXML -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>${javafx.version}</version>
        </dependency>

        <!-- JavaFX Graphics -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>${javafx.version}</version>
            <classifier>linux</classifier>
        </dependency>

        <!-- JavaFX POM -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx</artifactId>
            <version>11</version>
            <type>pom</type>
        </dependency>

        <!-- Log4j core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.19.0</version> <!-- Убедитесь, что это последняя версия -->
        </dependency>

        <!-- Log4j API -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.19.0</version> <!-- Убедитесь, что это совпадает с log4j-core -->
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.fxmisc.richtext/richtextfx -->
        <dependency>
            <groupId>org.fxmisc.richtext</groupId>
            <artifactId>richtextfx</artifactId>
            <version>0.11.3</version>
        </dependency>
        
        
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.8</version>
            <configuration>
                <mainClass>com.debate.RichTextEditor</mainClass>
                <!-- <options> -->
                    <!-- <option>-Dbar=${bar}</option> -->
                    <!-- <option> add-opens</option> -->
                    <!-- <option>java.base/java.lang=org.openjfx.hellofx</option> -->
                <!-- </options> -->
                <!-- <commandlineArgs>foo</commandlineArgs> -->
            </configuration>
            </plugin>
        </plugins>
        <sourceDirectory>src/main/java</sourceDirectory>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>
    </build>
</project>

Я пытался использовать JavaFX для создания просмотрщика, но проблема в том, что он не показывает форматирование, а когда я пытаюсь использовать RTF, он просто отображает для выделения жирным. Мне нужно выяснить, как создать простой текстовый редактор. Ничего сложного. Если есть проект с открытым исходным кодом, который я мог бы форкнуть, это тоже сработает. Мне нужно уметь обрабатывать .odt, .rtf, .docx и .pdf. Если у меня правильные библиотеки, что я могу сделать, чтобы достичь своей цели?

Ответ или решение

Создание простого текстового редактора на Java с использованием Maven — задача, требующая тщательного выбора библиотек и подходов для обеспечения корректного отображения и редактирования документов. В данной статье мы рассмотрим, какие библиотеки вам понадобятся, как их интегрировать в ваш проект и каким образом можно отобразить содержимое документов с сохранением форматирования.

Выбор библиотек

Для работы с различными форматами документов, такими как .docx, .odt, .rtf и .pdf, вам потребуются следующие библиотеки:

  1. Apache POI: Эта библиотека подходит для работы с форматами Microsoft Office, включая .docx. Она предоставляет мощные инструменты для чтения и записи файлов.

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.0</version>
    </dependency>
  2. ODF Toolkit: Для работы с файлами Open Document Formats (.odt) используйте ODF Toolkit, позволяющий читать и записывать файлы в этом формате.

    <dependency>
        <groupId>org.odftoolkit</groupId>
        <artifactId>odfdom-java</artifactId>
        <version>0.8.7</version>
    </dependency>
  3. Apache PDFBox: Эта библиотека необходима для работы с PDF-файлами. С её помощью можно извлекать текст и изображения из PDF-документов.

    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.24</version>
    </dependency>
  4. RichTextFX: Эта библиотека представляет собой расширение для JavaFX, которое позволяет создавать текстовые редакторы с поддержкой форматирования текста. Она будет полезна при создании пользовательского интерфейса для редактора.

    <dependency>
        <groupId>org.fxmisc.richtext</groupId>
        <artifactId>richtextfx</artifactId>
        <version>0.11.3</version>
    </dependency>

Структура pom.xml

Учтите, что ваш pom.xml уже содержит нужные зависимости, но вы можете удалить устаревшие или неиспользуемые зависимости:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.debate</groupId>
    <artifactId>DocumentEditor</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <javafx.version>17.0.1</javafx.version>
    </properties>

    <dependencies>
        <!-- Apache POI для .docx -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.0</version>
        </dependency>

        <!-- ODF Toolkit для .odt -->
        <dependency>
            <groupId>org.odftoolkit</groupId>
            <artifactId>odfdom-java</artifactId>
            <version>0.8.7</version>
        </dependency>

        <!-- PDFBox для .pdf -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.24</version>
        </dependency>

        <!-- RichTextFX для редактирования текстов -->
        <dependency>
            <groupId>org.fxmisc.richtext</groupId>
            <artifactId>richtextfx</artifactId>
            <version>0.11.3</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.8</version>
                <configuration>
                    <mainClass>com.debate.RichTextEditor</mainClass>
                </configuration>
            </plugin>
        </plugins>
        <sourceDirectory>src/main/java</sourceDirectory>
    </build>
</project>

Реализация редактора

Для создания простого текстового редактора вам необходимо:

  1. Создать пользовательский интерфейс (UI) с использованием JavaFX, где будет располагаться текстовое поле RichTextFX.

  2. Загрузить файлы через диалоговое окно и обработать их в соответствии с их форматом с использованием соответствующих библиотек (Apache POI, ODF Toolkit, PDFBox).

  3. Сохранение документа с изменениями, используя ту же библиотеку, с которой вы загрузили файл.

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

Пример загрузки и отображения файла

Вот примерный фрагмент кода для загрузки .docx файла с использованием Apache POI и отображения его в RichTextFX:

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import javafx.scene.control.TextArea;
import org.fxmisc.richtext.StyledTextArea;

import java.io.FileInputStream;
import java.io.IOException;

public void loadDocxFile(String fileName) {
    try (FileInputStream fis = new FileInputStream(fileName);
         XWPFDocument document = new XWPFDocument(fis)) {

        StyledTextArea<String> textArea = new StyledTextArea<>();

        for (XWPFParagraph paragraph : document.getParagraphs()) {
            textArea.appendText(paragraph.getText() + "\n");
        }

        // Обработка форматирования...
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Заключение

Создание простого текстового редактора на Java с использованием Maven требует глубокого понимания работы с библиотеками и JavaFX. Вам будет необходимо комбинировать различные технологии для достижения поставленной цели. Структурируя ваш проект на основе предложенных рекомендаций и используя указанные библиотеки, вы сможете разработать функциональный редактор, способный обрабатывать множество популярных форматов документов.

Оцените материал
Добавить комментарий

Капча загружается...