Apache POI Word - Szybki przewodnik

Często wymagana jest aplikacja do generowania dokumentów referencyjnych w formacie pliku Microsoft Word. Czasami oczekuje się nawet, że aplikacja otrzyma pliki Worda jako dane wejściowe.

Każdy programista Java, który chce tworzyć pliki MS-Office jako dane wyjściowe, musi w tym celu użyć predefiniowanego interfejsu API tylko do odczytu.

Co to jest Apache POI?

Apache POI to popularny interfejs API, który umożliwia programistom tworzenie, modyfikowanie i wyświetlanie plików MS-Office przy użyciu programów Java. Jest to biblioteka open source opracowana i rozpowszechniana przez Apache Software Foundation w celu projektowania lub modyfikowania plików MS-Office przy użyciu programu Java. Zawiera klasy i metody dekodowania danych wejściowych użytkownika lub pliku do dokumentów MS Office.

Składniki Apache POI

Apache POI zawiera klasy i metody do pracy ze wszystkimi dokumentami OLE2 Compound MS-Office. Lista składników tego API znajduje się poniżej -

  • POIFS (Poor Obfuscation Implementation File System)- Ten komponent jest podstawowym składnikiem wszystkich innych elementów POI. Służy do jawnego odczytywania różnych plików.

  • HSSF (Horrible SpreadSheet Format) - Służy do odczytu i zapisu plików MS-Excel w formacie .xls.

  • XSSF (XML SpreadSheet Format) - Jest używany dla formatu pliku .xlsx programu MS-Excel.

  • HPSF (Horrible Property Set Format) - Służy do wyodrębniania zestawów właściwości plików MS-Office.

  • HWPF (Horrible Word Processor Format) - Służy do odczytu i zapisu plików z rozszerzeniem .doc programu MS-Word.

  • XWPF (XML Word Processor Format) - Służy do czytania i pisania .docx pliki rozszerzeń MS-Word.

  • HSLF (Horrible Slide Layout Format) - Służy do czytania, tworzenia i edytowania prezentacji PowerPoint.

  • HDGF (Horrible DiaGram Format) - Zawiera klasy i metody dla plików binarnych MS-Visio.

  • HPBF (Horrible PuBlisher Format) - Służy do odczytu i zapisu plików MS-Publisher.

Ten samouczek przeprowadzi Cię przez proces pracy z plikami MS-Word przy użyciu języka Java. Dlatego dyskusja ogranicza się do komponentów HWPF i XWPF.

Note- STARSZE WERSJE OBSŁUGIWANYCH FORMATÓW PLIKÓW BINARNYCH POI, TAKICH JAK DOC, XLS, PPT, ITP. WERSJA 3.5 DALEJ, POI OBSŁUGUJE FORMATY PLIKÓW OOXML MS-OFFICE, TAKIE JAK DOCX, XLSX, PPTX, ITP.

W tym rozdziale omówiono proces konfigurowania Apache POI w systemach opartych na systemach Windows i Linux. Apache POI można łatwo zainstalować i zintegrować z aktualnym środowiskiem Java, wykonując kilka prostych kroków bez żadnych skomplikowanych procedur konfiguracyjnych. Administracja użytkownikami jest wymagana podczas instalacji.

wymagania systemowe

JDK Java SE 2 JDK 1.5 lub nowsza
Pamięć 1 GB RAM (zalecane)
Miejsca na dysku Brak minimalnych wymagań
Wersja systemu operacyjnego Windows XP lub nowszy, Linux

Przejdźmy teraz do kroków instalacji Apache POI.

Krok 1: Zweryfikuj instalację oprogramowania Java

Przede wszystkim musisz mieć zainstalowany pakiet Java Software Development Kit (SDK) w swoim systemie. Aby to sprawdzić, wykonaj dowolne z dwóch poleceń wymienionych poniżej, w zależności od platformy, na której pracujesz.

Jeśli instalacja Java została wykonana poprawnie, wyświetli się aktualna wersja i specyfikacja instalacji Java. Przykładowe dane wyjściowe podano w poniższej tabeli -

Platforma Komenda Przykładowe wyjście
Windows

Otwórz konsolę poleceń i wpisz -

\>java –version

Wersja Java „1.7.0_60”

Środowisko wykonawcze Java (TM) SE (kompilacja 1.7.0_60-b19)

Java Hotspot (TM) 64-bitowa maszyna wirtualna serwera (wersja 24.60-b09, tryb mieszany)

Linux

Otwórz terminal poleceń i wpisz -

$java –version

wersja java „1.7.0_25”

Otwórz środowisko wykonawcze JDK (rhel-2.3.10.4.el6_4-x86_64)

Otwórz 64-bitową maszynę wirtualną serwera JDK (kompilacja 23.7-b01, tryb mieszany)

  • Zakładamy, że czytelnicy tego samouczka mają zainstalowany pakiet Java SDK w wersji 1.7.0_60 w swoim systemie.

  • Jeśli nie masz Java SDK, pobierz jego aktualną wersję z https://www.oracle.com/technetwork/java/javase/downloads/index.html i zainstaluj.

Krok 2: Skonfiguruj środowisko Java

Ustaw zmienną środowiskową JAVA_HOME tak, aby wskazywała lokalizację katalogu podstawowego, w którym na komputerze jest zainstalowana Java. Na przykład,

Platforma Opis
Windows Ustaw JAVA_HOME na C: \ ProgramFiles \ java \ jdk1.7.0_60
Linux Eksportuj JAVA_HOME = / usr / local / java-current

Dołącz pełną ścieżkę lokalizacji kompilatora Java do ścieżki systemowej.

Platforma Opis
Windows Dołącz ciąg „C: \ Program Files \ Java \ jdk1.7.0_60 \ bin” na końcu zmiennej systemowej PATH.
Linux ŚCIEŻKA eksportu = $ ŚCIEŻKA: $ JAVA_HOME / bin /

Wykonaj polecenie java - version z wiersza polecenia, jak wyjaśniono powyżej.

Krok 3: Zainstaluj bibliotekę Apache POI

Pobierz najnowszą wersję Apache POI z witryny https://poi.apache.org/download.htmli rozpakuj jego zawartość do folderu, z którego wymagane biblioteki można połączyć z programem Java. Załóżmy, że pliki są zebrane w folderze na dysku C.

Poniższe obrazy pokazują katalogi i strukturę plików w pobranym folderze -

Dodaj pełną ścieżkę pięciu jars jak podkreślono na powyższym obrazku do CLASSPATH.

Platforma Opis
Windows

Dołącz następujące ciągi na końcu zmiennej użytkownika CLASSPATH -

„C: \ poi-3.9 \ poi-3.9-20121203.jar;”

„C: \ poi-3.9 \ poi-ooxml-3.9-20121203.jar;”

„C: \ poi-3.9 \ poi-ooxml-schemas-3.9-20121203.jar;”

„C: \ poi-3.9 \ ooxml-lib \ dom4j-1.6.1.jar;”

„C: \ poi-3.9 \ ooxml-lib \ xmlbeans-2.3.0.jar;.;”

Linux

Eksportuj 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

Ten rozdział zawiera opis klas i metod Apache POI do zarządzania dokumentem Word.

Dokument

Jest to interfejs znaczników (interfejs nie zawiera żadnych metod), który informuje, że zaimplementowana klasa może być w stanie utworzyć dokument tekstowy.

XWPFDocument

To jest klasa poniżej org.apache.poi.xwpf.usermodelpakiet. Służy do tworzenia dokumentów MS-Word w formacie .docx.

Metody klasowe

Sr.No. Metoda i opis
1

commit()

Zatwierdza i zapisuje dokument.

2

createParagraph()

Dołącza nowy akapit do tego dokumentu.

3

createTable()

Tworzy pustą tabelę z jednym wierszem i jedną kolumną jako domyślną.

4

createTOC()

Tworzy spis treści dla dokumentu programu Word.

5

getParagraphs()

Zwraca akapity zawierające tekst nagłówka lub stopki.

6

getStyle()

Zwraca używany obiekt stylów.

Pozostałe metody tej klasy można znaleźć w pełnym dokumencie API pod adresem -

Pakiet org.apache.poi.openxml4j.opc.internal .

XWPFParagraph

To jest klasa poniżej org.apache.poi.xwpf.usermodelpakiet i służy do tworzenia akapitu w dokumencie tekstowym. Ta instancja jest również używana do dodawania wszystkich typów elementów do dokumentu Word.

Metody klasowe

Sr.No. Metoda i opis
1

createRun()

Dołącza nowy przebieg do tego akapitu.

2

getAlignment()

Zwraca wyrównanie akapitu, które zostanie zastosowane do tekstu w tym akapicie.

3

setAlignment(ParagraphAlignment align)

Określa wyrównanie akapitu, które zostanie zastosowane do tekstu w tym akapicie.

4

setBorderBottom(Borders border)

Określa obramowanie, które ma być wyświetlane pod zestawem akapitów, które mają ten sam zestaw ustawień obramowania akapitu.

5

setBorderLeft(Borders border)

Określa obramowanie, które będzie wyświetlane po lewej stronie strony wokół określonego akapitu.

6

setBorderRight(Borders border)

Określa obramowanie, które będzie wyświetlane po prawej stronie strony wokół określonego akapitu.

7

setBorderTop(Borders border)

Określa obramowanie, które będzie wyświetlane nad zestawem akapitów, które mają ten sam zestaw ustawień obramowania akapitu.

Pozostałe metody tej klasy można znaleźć w pełnym dokumencie API pod adresem -

Dokumentacja POI API

XWPFRun

To jest klasa poniżej org.apache.poi.xwpf.usermodel pakiet i służy do dodawania regionu tekstu do akapitu.

Metody klasowe

Sr.No. Metoda i opis
1

addBreak()

Określa, że ​​przerwa powinna zostać umieszczona w bieżącej lokalizacji w zawartości uruchomienia.

2

addTab()

Określa, że ​​zakładka powinna zostać umieszczona w bieżącej lokalizacji w zawartości uruchomienia.

3

setColor(java.lang.String rgbStr)

Ustawia kolor tekstu.

4

setFontSize(int size)

Określa rozmiar czcionki, który zostanie zastosowany do wszystkich nieskomplikowanych znaków skryptu w treści tego uruchomienia po wyświetleniu.

5

setText(java.lang.String value)

Sets the text of this text run.

6

setBold(boolean value)

Specifies whether the bold property shall be applied to all non-complex script characters in the content of this run when displayed in a document.

For the remaining methods of this class, refer the complete API document at −

POI API Documentation

XWPFStyle

This is a class under org.apache.poi.xwpf.usermodel package and is used to add different styles to the object elements in a word document.

Class Methods

Sr.No. Method & Description
1

getNextStyleID()

It is used to get StyleID of the next style.

2

getStyleId()

It is used to get StyleID of the style.

3

getStyles()

It is used to get styles.

4

setStyleId(java.lang.String styleId)

It is used to set styleID.

For the remaining methods of this class, refer the complete API document at −

POI API Documentation

XWPFTable

This is a class under org.apache.poi.xwpf.usermodel package and is used to add table data into a word document.

Class Methods

Sr.No. Method & Description
1

addNewCol()

Adds a new column for each row in this table.

2

addRow(XWPFTableRow row, int pos)

Adds a new Row to the table at position pos.

3

createRow()

Creates a new XWPFTableRow object with as many cells as the number of columns defined in that moment.

4

setWidth(int width)

Sets the width of the column.

For the remaining methods of this class, refer the complete API document at: POI API Documentation

XWPFWordExtractor

This is a class under org.apache.poi.xwpf.extractor package. It is a basic parser class used to extract the simple text from a Word document.

Class Methods

Sr.No. Method & Description
1

getText()

Retrieves all the text from the document.

For the remaining methods of this class, refer the complete API document at: POI API Documentation

Here the term 'document' refers to a MS-Word file. After completion of this chapter, you will be able to create new documents and open existing documents using your Java program.

Create Blank Document

The following simple program is used to create a blank MS-Word document −

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

public class CreateDocument {

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

Save the above Java code as CreateDocument.java, and then compile and execute it from the command prompt as follows −

$javac  CreateDocument.java
$java CreateDocument

If your system environment is configured with the POI library, it will compile and execute to generate a blank Excel file named createdocument.docx in your current directory and display the following output in the command prompt −

createdocument.docx written successfully

In this chapter you will learn how to create a Paragraph and how to add it to a document using Java. Paragraph is a part of a page in a Word file.

After completing this chapter, you will be able to create a Paragraph and perform read operations on it.

Create a Paragraph

First of all, let us create a Paragraph using the referenced classes discussed in the earlier chapters. By following the previous chapter, create a Document first, and then we can create a Paragraph.

The following code snippet is used to create a spreadsheet −

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

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

Run on Paragraph

You can enter the text or any object element, using Run. Using Paragraph instance you can create run.

The following code snippet is used to create a Run.

XWPFRun run = paragraph.createRun();

Write into a Paragraph

Let us try entering some text into a document. Consider the below text data −

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

The following code is used to write the above data into a paragraph.

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

public class CreateParagraph {

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

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

Save the above Java code as CreateParagraph.java, and then compile and run it from the command prompt as follows −

$javac CreateParagraph.java
$java CreateParagraph

It will compile and execute to generate a Word file named createparagraph.docx in your current directory and you will get the following output in the command prompt −

createparagraph.docx written successfully

The createparagraph.docx file looks as follows.

In this chapter, you will learn how to apply border to a paragraph using Java programming.

Applying Border

The following code is used to apply Borders in a Document −

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

public class ApplyingBorder {

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

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

Save the above code in a file named ApplyingBorder.java, compile and execute it from the command prompt as follows −

$javac ApplyingBorder.java
$java ApplyingBorder

If your system is configured with the POI library, then it will compile and execute to generate a Word document named applyingborder.docx in your current directory and display the following output −

applyingborder.docx written successfully

The applyingborder.docx file looks as follows −

In this chapter, you will learn how to create a table of data in a document. You can create a table data by using XWPFTable class. By adding each Row to table and adding each cell to Row, you will get table data.

Create Table

The following code is used to creating table in a document −

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

public class CreateTable {

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

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

Save the above code in a file named CreateTable.java. Compile and execute it from the command prompt as follows −

$javac CreateTable.java
$java CreateTable

It generates a Word file named createtable.docx in your current directory and display the following output on the command prompt −

createtable.docx written successfully

The createtable.docx file looks as follows −

This chapter shows how to apply different font styles and alignments in a Word document using Java. Generally, Font Style contains: Font size, Type, Bold, Italic, and Underline. And Alignment is categorized into left, center, right, and justify.

Font Style

The following code is used to set different styles of font −

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

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

public class FontStyle {

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

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

Save the above code as FontStyle.java and then compile and execute it from the command prompt as follows −

$javac FontStyle.java
$java FontStyle

It will generate a Word file named fontstyle.docx in your current directory and display the following output on the command prompt −

fontstyle.docx written successfully

The fontstyle.docx file looks as follows.

Alignment

The following code is used to set alignment to the paragraph text −

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

public class AlignParagraph {

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

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

Save the above code as AlignParagraph.java and then compile and execute it from the command prompt as follows −

$javac AlignParagraph.java
$java AlignParagraph

It will generate a Word file named alignparagraph.docx in your current directory and display the following output in the command prompt −

alignparagraph.docx written successfully

The alignparagraph.docx file looks as follows −

This chapter explains how to extract simple text data from a Word document using Java. In case you want to extract metadata from a Word document, make use of Apache Tika.

For .docx files, we use the class org.apache.poi.xwpf.extractor.XPFFWordExtractor that extracts and returns simple data from a Word file. In the same way, we have different methodologies to extract headings, footnotes, table data, etc. from a Word file.

The following code shows how to extract simple text from a Word file −

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

public class WordExtractor {

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

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

Save the above code as WordExtractor.java. Compile and execute it from the command prompt as follows −

$javac WordExtractor.java
$java WordExtractor

It will generate the following output:

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