Java Apache POI новые строки случайно вставлены в сгенерированную страницу? - PullRequest
0 голосов
/ 09 июля 2019

Я работаю над проектом для развлечения, который занимается созданием моего фирменного бланка.Я использую Apache POI для обработки текстовых документов.Я планирую расширить его, как только у меня будет базовая структура для добавления графического интерфейса с использованием AWT и возможности его настройки, что объясняет, как у меня есть некоторые настройки в коде.Я получаю некоторые действительно странные результаты при попытке отформатировать мой заголовок, кажется, что Apache POI вставляет строки, где он хочет?Я думаю, что я чего-то не понимаю.

CreateDocument.java

package letterHeader;

import java.io.File;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;

public class CreateDocument 
{
    // create blank document
    static XWPFDocument document = new XWPFDocument();

    // create paragraphs for header
    static XWPFParagraph name = document.createParagraph();
    static XWPFParagraph address = document.createParagraph();
    static ArrayList<XWPFParagraph> phoneNumbers = new ArrayList<XWPFParagraph>();
    static ArrayList<XWPFParagraph> emails = new ArrayList<XWPFParagraph>();
    static XWPFParagraph date = document.createParagraph();

    // create runner objects
    static XWPFRun nameRunner = name.createRun();
    static XWPFRun addressRunner = address.createRun();
    // remember to make a runner for each email
    static ArrayList<XWPFRun> phoneRunners = new ArrayList<XWPFRun>();
    static ArrayList<XWPFRun> emailRunners = new ArrayList<XWPFRun>();

    public static void main(String[] args) throws Exception 
    {   
        // make datetime for timestamp
        DateFormat dateFormat = new SimpleDateFormat("MM:dd:yyyy");
        Date date = new Date();

        // create IO stream with document name
        FileOutputStream out = new FileOutputStream( new File("letterhead" + dateFormat.format(date) + ".docx"));

        CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
        CTPageMar pageMar = sectPr.addNewPgMar();
        pageMar.setLeft(BigInteger.valueOf(720L));
        pageMar.setTop(BigInteger.valueOf(720L));
        pageMar.setRight(BigInteger.valueOf(720L));
        pageMar.setBottom(BigInteger.valueOf(720L));

        // storing the ID automatically makes the objects
        int phoneID = addListParagraph("phone");
        int emailID1 = addListParagraph("email");
        int emailID2 = addListParagraph("email");

        // make name
        nameRunner.setText("Michael Simanski");
        nameRunner.setBold(true);
        nameRunner.setFontSize(18);
        nameRunner.setFontFamily("Times");

        // make address
        addressRunner.setText("address");
        addressRunner.setFontSize(12);
        addressRunner.setFontFamily("Times");

        // make phone
        phoneRunners.get(phoneID).setText("phone");
        phoneRunners.get(phoneID).setFontSize(12);
        phoneRunners.get(phoneID).setFontFamily("Times");

        // make emails
        emailRunners.get(emailID1).setText("mfsimanski@gmail.com");
        emailRunners.get(emailID1).setFontSize(12);
        emailRunners.get(emailID1).setFontFamily("Times");  
        emailRunners.get(emailID2).setText("secondemail");
        emailRunners.get(emailID2).setFontSize(12);
        emailRunners.get(emailID2).setFontFamily("Times");
        emailRunners.get(emailID2).addCarriageReturn();

        document.write(out);
        out.close();


    }

    public static int addListParagraph(String type) 
    {
        switch (type) 
        {
            case "phone":
                phoneNumbers.add(document.createParagraph());
                phoneRunners.add(phoneNumbers.get(phoneNumbers.size() - 1).createRun());
                return phoneNumbers.size() - 1;

            case "email":
                emails.add(document.createParagraph());
                emailRunners.add(emails.get(emails.size() - 1).createRun());
                return emails.size() - 1;

            default:
                System.out.println("ERROR: Paragraph type not found!");
                return 0;
        }
    }

}

Довольно просто, верно?Я ожидаю следующих результатов:

фирменный бланк07 / 08 / 2019.docx

Michael Simanski
address
phone
mfsimanski@gmail.com
secondemail 

Но я с недоумением получаю:

фирменный бланк07 / 08 / 2019.docx

Michael Simanski
address

phone
mfsimanski@gmail.com
secondemail 

Я что-то упускаю, глупый или оба?

...