We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

合并后的DOCX文件转PDF出现表格变宽超出页面的情况

这是我准备转换的word转换前.docx (256.4 KB)
我转换pdf代码如下
Document doc = new Document(wordFileFullPath);
doc.getCompatibilityOptions().setUseFELayout(true);
doc.getStyles().getDefaultFont().setLocaleIdFarEast(2052);
doc.save(pdfFileFullPath, SaveFormat.PDF);
得到的pdf转换后.pdf (321.3 KB)
异常对比图对比图.png (150.1 KB)
出现表格超出页面的情况

@kongbai, 您能否附上您正在合并的文档并显示用于合并的代码?

我合并的方法如下

public static void mergeDocument(List<String> resourceWordPathList, String targetWordPath)
{
    try
    {
        Document doc = new Document();
        List<Document> documentList = new ArrayList<>();
        for (String resourceWordPath : resourceWordPathList)
        {
            Document document = new Document(resourceWordPath);
            documentList.add(document);
        }
        if (documentList.size() == 1)
        {
            doc = documentList.get(0);
        }
        else
        {
            doc.removeAllChildren();
            DocumentBuilder builder = new DocumentBuilder(doc);
            builder.moveToDocumentStart();
            for (int i = 0; i < documentList.size(); i++)
            {
                Document document = documentList.get(i);
                builder.insertDocument(document, ImportFormatMode.KEEP_DIFFERENT_STYLES);
                if (i != documentList.size() - 1)
                {
                    // 使用分节符,解决横纵页面混乱问题
                    builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE);
                }
            }
        }
        // 删除自带页眉页脚
        removeHeaderFooter(doc);

        doc.save(targetWordPath, SaveFormat.DOCX);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

一个最小示例

public static void main(String[] args) throws Exception
{
    List<String> pathList = new ArrayList<>();
    pathList.add("C:\\Users\\ct\\Desktop\\1.docx");
    pathList.add("C:\\Users\\ct\\Desktop\\2.docx");
    mergeDocument(pathList, "C:\\Users\\ct\\Desktop\\3.docx");
}

合并的文件1.docx (253.5 KB)
2.docx (15.1 KB)

上面提到的removeHeaderFooter方法,我也贴一下

public static void removeHeaderFooter(Document doc)
{
    try
    {
        for (Section section : doc.getSections())
        {
            // 一个分节最多可以有三个不同的页眉页脚(对于第一页,偶数页和奇数页).
            HeaderFooter footer;
            HeaderFooter header;

            // 1 - “First”页眉/页脚,只出现在一个部分的第一页上
            footer = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.FOOTER_FIRST);
            if (footer != null)
            {
                footer.remove();
            }
            header = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.HEADER_FIRST);
            if (header != null)
            {
                header.remove();
            }

            // 2 -  “主要”页眉/页脚,出现在奇数页
            footer = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.FOOTER_PRIMARY);
            if (footer != null)
            {
                footer.remove();
            }
            header = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.HEADER_PRIMARY);
            if (header != null)
            {
                header.remove();
            }

            // 3 - “偶数”页眉/页脚,出现在偶数页上
            footer = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.FOOTER_EVEN);
            if (footer != null)
            {
                footer.remove();
            }
            header = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.HEADER_EVEN);
            if (header != null)
            {
                header.remove();
            }
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

@kongbai, Microsoft Word 2019 还显示超出页面边框的表格。 所以我认为 Aspose.Word 在这里是正确的,因为它试图复制 Word 的行为。

/

左边的“对比图.png”是用的什么编辑器? 是 Microsoft Word 吗?

如果您在计算机上观察到不同的行为,您能否使用 Microsoft Word 将 2.docx 转换为 PDF 并附加到此线程?

我尝试在我的Microsoft Word 2019上打开2.docx显示是正常的
2.png (42.1 KB)

这是我在Microsoft Word 2019上另存为pdf得到的文件2.pdf (117.0 KB)

@kongbai, Microsoft Word 可以根据首选的编辑语言以 2 种方式呈现表格。 请看下面的截图:

Aspose.Words 只有在首选编辑语言为英语的情况下才能正确呈现。 我为这个问题记录了一张 WORDSNET-24114 票。 一旦解决,您将在此线程中收到通知。

你好,我发现是转换的pdf表格单元格的像是文本不会自动换行一样,导致超出页面转换后.png (67.3 KB)

我这边解决了,在word中使用固定列宽.png (37.9 KB),生成的pdf就显示正常了,

@kongbai, 您可以使用 Aspose.Words 以编程方式进行。 请看一下: