将字符串映射到与控制台相同的 XWPFDocument

Mapping a String to XWPFDocument same as console

我正在使用 XWPFDocument 为发票生成 .docx。我在控制台上设计了如下所示的字符串

    XXXX Restaurant & Cafe
      Phone No# 12131546

Invoice No. 120
Type: C-6
Customer Name:         29 05 2015
---------------------------------------
Product    Qty   Price   Total
---------------------------------------
fr. egg+toast but. jam
           1  110.0  110.0
---------------------------------------
Discount: 0%
Sub total: 110.0
Cash: 200

我生成 .docx 的代码是:

FileOutputStream output = new FileOutputStream(FILE);                   
                    XWPFDocument doc = new XWPFDocument();
                     XWPFParagraph para = doc.createParagraph();
                    para.setAlignment(ParagraphAlignment.CENTER);
                     XWPFRun run  = para.createRun();
                     run.setBold(true);
                     run.setFontSize(11);
                      doc.write(output); 
                    output.close();

但生成的 .docx 文本如下所示:

"XXXXXX Restaurant & Cafe Phone No# 12313531 Invoice No. 120 Type: C-6 Customer Name: 29 05 2015 --------------------------------------- Product Qty Price Total --------------------------------------- fr. egg+toast but. jam 1 110.0 110.0 --------------------------------------- Discount: 0% Sub total: 110.0 Cash: 200 Balance: 90.0"

我想得到上面的东西,它在 console.Please 上看起来是一样的,请尽快提供帮助。

我可能错了。但据我所知,XWPFRun 会忽略字符串中的所有 \n 。因此,尝试将 run.setText(text) 与带样式的文本一起使用会不幸地得到无样式的文本。您必须设置文本创建运行的样式。 像这样的东西可能确实有效,但我现在还没有测试过:

XWPFParagraph p = doc.createParagraph();
for(Sting s:text.split("\n")){
    XWPFRun = p.createRun();
    run.setText(s);
}

这不会保留字符串中的所有样式信息。您只需使用 XWPFRuns 生成样式化输出。