Java POI로 Word(.docx) 파일 만들기

12806 단어 java8Worddocx자바POI

소개



사전에 다음 라이브러리를 준비합니다.
  • Apache POI
  • htps: //포이. 아파치. 오 rg / 도w 응아 d. HTML
  • ※"poi-bin-3.16-20170419.tar.gz"의 링크에서 다운로드


  • 이번 샘플은 이하의 jar가 있으면 동작합니다.
  • poi-3.16.jar
  • poi-ooxml-3.16.jar
  • poi-ooxml-schemas-3.16.jar
  • xmlbeans-2.6.0.jar
  • commons-collections4-4.1.jar

  • 구현 예



    이번 샘플에서는 다음 기능을 확인합니다.
  • 여러 단락 만들기
  • 단락에 스타일이 다른 문자열을 여러 개 배치
  • 테이블 만들기
  • 표 셀에 여러 단락 만들기
  • 표의 셀 안의 단락에 스타일의 다른 캐릭터 라인을 복수 배치

  • 조금 시원하고 있지만 우선은 이것 정도로.
    동작 확인하기 쉽도록 main 메소드로 실행할 수 있도록 하고 있습니다.

    DOCXWriteTest.java
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFParagraph;
    import org.apache.poi.xwpf.usermodel.XWPFRun;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    
    /**
     *
     * @author tool-taro.com
     */
    public class DOCXWriteTest {
    
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
            String outputFilePath = "out.docx";
            XWPFDocument document = null;
            XWPFTable table;
            XWPFParagraph paragraph;
            XWPFRun run;
            FileOutputStream fout = null;
    
            try {
                document = new XWPFDocument();
    
                //普通の段落を2つ作る
                for (int i = 0; i < 2; i++) {
                    paragraph = document.createParagraph();
    
                    //それぞれの段落の中に色の異なるテキストを2種配置する
                    //setText内で\nを指定しても改行されないので注意、改行するには必ず段落を作る
                    run = paragraph.createRun();
                    run.setFontFamily("MS ゴシック");
                    run.setText("黒のテキスト");
    
                    run = paragraph.createRun();
                    run.setFontFamily("MS ゴシック");
                    run.setColor("ff0000");
                    run.setText("赤のテキスト");
                }
                //2x2の表を作る
                table = document.createTable(2, 2);
                for (int i = 0; i < 2; i++) {
                    for (int j = 0; j < 2; j++) {
                        //それぞれのセルの中に段落を2つ作る
                        for (int k = 0; k < 2; k++) {
                            //セルには初期状態で1つの段落がある(実装が変わるかもしれないので念のため存在数を確認して適切に処理)
                            if (table.getRow(i).getCell(j).getParagraphs().size() > k) {
                                paragraph = table.getRow(i).getCell(j).getParagraphs().get(k);
                            }
                            else {
                                paragraph = table.getRow(i).getCell(j).addParagraph();
                            }
    
                            //それぞれの段落の中に色の異なるテキストを2種配置する
                            run = paragraph.createRun();
                            run.setFontFamily("MS ゴシック");
                            run.setText("黒のテキスト");
    
                            run = paragraph.createRun();
                            run.setFontFamily("MS ゴシック");
                            run.setColor("ff0000");
                            run.setText("赤のテキスト");
                        }
                    }
                }
    
                //ファイル出力
                fout = new FileOutputStream(outputFilePath);
                document.write(fout);
            }
            finally {
                if (fout != null) {
                    try {
                        fout.close();
                    }
                    catch (IOException e) {
                    }
                }
                if (document != null) {
                    try {
                        document.close();
                    }
                    catch (IOException e) {
                    }
                }
            }
        }
    }
    

    동작 확인


    $ javac DOCXWriteTest.java
    $ java DOCXWriteTest
    

    작성된 파일은 이런 느낌이 되었습니다.


    환경



  • 개발
  • Windows 10 Pro
  • JDK 1.8.0_131
  • NetBeans IDE 8.2


  • 동작 검증
  • CentOS Linux release 7.3
  • JDK 1.8.0_131


  • 위의 구현을 기반으로 웹 도구도 공개하고 있습니다.
    Diff (텍스트 차이 확인) | 웹 편리 도구 @ 도구 타로

    좋은 웹페이지 즐겨찾기