这是我准备转换的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)
出现表格超出页面的情况
我合并的方法如下
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");
}
上面提到的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 并附加到此线程?
@kongbai, Microsoft Word 可以根据首选的编辑语言以 2 种方式呈现表格。 请看下面的截图:
Aspose.Words 只有在首选编辑语言为英语的情况下才能正确呈现。 我为这个问题记录了一张 WORDSNET-24114 票。 一旦解决,您将在此线程中收到通知。