当前位置: 首页 > 知识库问答 >
问题:

使用Apache POI创建的文档在Microsoft Word中与在LibreOffice Writer中不同

祁柏
2023-03-14

我试图使用Apache POI创建docx文档。但是,当我在Microsoft Word中打开创建的文档时,结果与用LibreOffice Writer打开时不同。我用表和交叉引用体验了这种行为。

我想知道是否有必要进行任何配置以将输出格式保存为微软Word格式。

例如,下面的代码创建一个docx文档,该文档包含一个具有2行2列的表:

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

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

public class DocWithTable {

    public static final int NUM_ROWS = 2;
    public static final int NUM_COLS = 2;

    public static void main(String[] args) throws IOException {
        XWPFDocument document = new XWPFDocument();

        XWPFTable table = document.createTable();
        XWPFTableRow firstRow = table.getRow(0);
        for (int c = 1; c < NUM_COLS; c++) {
            firstRow.addNewTableCell().getCTTc().addNewTcPr();
        }
        for (int r = 1; r < NUM_ROWS; r++) {
            table.createRow();
        }

        FileOutputStream out = new FileOutputStream(new File("file.docx"));
        document.write(out);
        out.close();
        document.close();
    }

}

共有1个答案

卜勇
2023-03-14

您的表单元格都是空的。为此,行为确实不同。如果未设置显式宽度,则在Microsoft Word中,所有表格单元格的宽度与内容所需相同,在LibreOffice Writer中,表格宽度为可用页宽的100%。

使用Apache poi 4.1.0,可以使用xwpftable.setwidth将表宽度设置为100%以使行为相等。

在代码中:

...
XWPFTable table = document.createTable();

table.setWidth("100%");
...
 类似资料:
  • 在使用ApachePOI写入word文档时,对于必须根据某个“计数”动态复制段落的位置,这些段落的标题必须按照章节顺序编号。假设它是word文档中的第7节,那么其中每个段落的标题应按顺序编号为7.1、7.2等。 尽管我看到了一些解决方案,其中考虑了word文档的xml,并使用了XWPFN编号。 还有其他更简单的方法吗? 或 如果我的word模板已经有了一个带有编号标题的段落,并且我必须多次复制相同

  • 我试图实现的很简单。只有当数据库不存在时,我才需要在数据库中创建一个用户条目。 应用程序流程: 使用Firebase身份验证(获取UID)创建用户 客户端代码(创建操作): firestore规则: 附加信息: 正如您可能已经知道的那样,代码不起作用。每次我运行客户端代码时,当前用户都会被一个新文档完全替换。但是,如果我从规则中删除以下行,一切都会正常工作: 但现在问题来了,如何保护用户文档中的数

  • 我是新来的Spring和MongoDB。所以,听到是我想要理解的用例。 在SpringBoot和MongoDB结构中。我试图在Mongo中插入一个新文档,因此在POJO/Domain/Data类中使用了Java文档。现在,我已经编写了代码并启动了服务器。我的问题是,什么时候在MongoDB中创建集合?例如,当启动服务器时(Spring将扫描所有的类,并在创建类时创建集合id DB),或者当调用存储

  • 我在Java的Android应用程序中使用FirebaseSDK,我想将文档的ID存储在文档中。例如,假设我有一个名为学生的类,我想将学生的卷号存储为文档ID以及rollNum字段;我不想随机生成卷号,我想输入卷号,但按照下面的代码我无法这样做。 我正在使用以下代码创建一个文档 即使调用也不会在FiRecovery上设置字段。在这种情况下应该怎么做?我知道解决方法是删除。还有其他可用的解决方案吗?

  • 我正在尝试创建一个包含多列的word文档。这样做(而不是使用表)的原因是,数据将跨越多个页面,在添加到新页面之前,我只能用列填充整个页面。 可以用ApachePOI实现吗?谢谢

  • 利用 Adobe Stock 中丰富的模板和空白预设,您可以快速着手自己的创意项目。 注意:  Typekit 现已更名为 Adobe Fonts,包含在 Creative Cloud 和其他订阅中。了解详情。 在 Adobe Photoshop 2017 版本中引入 当您在 Photoshop 中创建文档时,您无需从空白画布开始,而是可以从 Adobe Stock 的各种模板中进行选择。这些模板