编辑后word转PDF,出现空白页

在总页数为2的word,在第一页的表格增加一下后,word的总页数还是2页,但转换PDF时后出现空白页,发现是第一页的最后的空白段落造成的,但删除的话,后面页的内容会向前缩进,关于空白页如何能删除?而且在编辑后读入的页数识别为3;
word增加的内容
图片.png (7.0 KB)
出现的空白页
图片.png (3.5 KB)
原始文档:
blank_page.docx (34.3 KB)
未修改转换的PDF:
result.pdf (137.0 KB)
word增加一行后转换的PDF:
result.pdf (138.4 KB)

blank_page.docx (34.4 KB)

@LXY133 您的文档在第一页末尾有分页符,当您添加更多内容时,它会移动到下一页并创建一个新的单页。为了避免这种情况,您可以删除分页符:

NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);
for (Paragraph para : (Iterable<Paragraph>) paragraphs)
{
    // If the paragraph has a page break set before, then clear it.
    if (para.getParagraphFormat().getPageBreakBefore()) {
        para.getParagraphFormat().setPageBreakBefore(false);
    }

    // Check all runs in the paragraph for page breaks and remove them.
    for (Run run : para.getRuns()) {
        if (run.getText().contains(ControlChar.PAGE_BREAK)) {
            run.setText(run.getText().replace(ControlChar.PAGE_BREAK, ""));
        }
    }
}

有的文档那为什么在word软件打开时,显示的页数与aspose.word载入文件后获取的页数是不一致

@LXY133 遗憾的是,这很难说。可能是字体问题,也可能是其他原因。请提供此类文件供我方测试。

test3-1.docx (25.9 KB)

这个是出现问题的文档

@LXY133 本文件具有兼容性。Aspose.Words 与 MS Word 2019 版本一样加载文档,但该版本有 2 页。您可以在加载文档后设置版本,以获得正确的输出:

doc.getCompatibilityOptions().optimizeFor(MsWordVersion.WORD_2010);

如果这个文档为doc的也会出现MS word查看为1页,但aspose.word 加载后有2页,也可以用上面的进行读入的设置吗?

@LXY133 是的,你可以使用它。也许需要更改 MS Word 兼容性版本。

使用这个模式后,部分word文件出现行间距被压缩的情况
这个原样式:
图片.png (55.3 KB)

设置:

doc.getCompatibilityOptions().optimizeFor(MsWordVersion.WORD_2010);

文件显示:
图片.png (76.5 KB)

@LXY133 您能提供该文件吗?我们将进行调查,并向您提供更多信息。

line-test.docx (25.5 KB)

result.pdf (168.5 KB)

@LXY133 我检查了文件。你能在不使用 doc.getCompatibilityOptions().optimizeFor(MsWordVersion.WORD_2010); 的情况下使用该文档吗?各版本的页数并无差异,那么在此文档中使用此选项的原因是什么?

我可以不用这项配置,但对于部分读入的word如果不用这个选项会造成出现读入页数与MS 软件打开时显示的页数不一致,而处理word功能是统一的接口,所以无法具体确认那些文档可以不用该项配置

@LXY133 是的,你说得对。很难界定您需要使用哪个版本的 MS Word。顺便说一下,您可以尝试使用以下代码,仅在遇到页数问题时使用 “WORD_2010”。

Document doc = new Document(getMyDir() + "line-test.docx");

int pageCount = doc.getPageCount();

doc.getCompatibilityOptions().optimizeFor(MsWordVersion.WORD_2010);
doc.updatePageLayout();
int compatibilityPageCount = doc.getPageCount();

if (pageCount == compatibilityPageCount) {
    doc.getCompatibilityOptions().optimizeFor(MsWordVersion.WORD_2019);
    doc.getCompatibilityOptions().setAdjustLineHeightInTable(true);
    doc.updatePageLayout();
}

doc.save(getArtifactsDir() + "output.pdf");

好的,我试试能否解决当前的问题,这里有时即使添加的分页符的删除了,但是会出现多一页空白页的问题(第一页最末尾有两个空白段落,删除其中一个,下一页的内容不会往上调,且转换不会出现空白页)

图片.png (32.7 KB)

@LXY133 如果能让我看一下导致这个问题的文件就更好了。在你的第一个文档中,删除最后几段并不能解决增加行数后出现空白页的问题。

@LXY133 我检查了文档,使用所提供的代码后,没有任何空白页。您希望得到什么结果?

这是我这边的测试结果和原始文件, 第二页就是一个空白的内容页,用的版本是24.5
20240620_blank.docx (37.2 KB)

result.pdf (207.6 KB)

@LXY133 以下是我的输出结果:
output.pdf (93.1 KB)

以及代码:

Document doc = new Document("input.docx");
NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);
for (Paragraph para : (Iterable<Paragraph>) paragraphs)
{
    // If the paragraph has a page break set before, then clear it.
    if (para.getParagraphFormat().getPageBreakBefore()) {
        para.getParagraphFormat().setPageBreakBefore(false);
    }

    // Check all runs in the paragraph for page breaks and remove them.
    for (Run run : para.getRuns()) {
        if (run.getText().contains(ControlChar.PAGE_BREAK)) {
            run.setText(run.getText().replace(ControlChar.PAGE_BREAK, ""));
        }
    }
}

doc.save("output.pdf");

收到,我找一些文档试试验证一下能否解决空白页的问题先