WPS文件转换后文件中表格高度变窄,从而导致部分信息看不到。
目前使用的是java 语言,aspose.word 23.8 ,麻烦帮看下是否可以优化处理。谢谢。
2025年奇瑞集团KD车身包装生产线及登车桥年度框架协议.docx (51.1 KB)
错误的现象如截图所示:
实际应该是以下的截图:
WPS文件转换后文件中表格高度变窄,从而导致部分信息看不到。
目前使用的是java 语言,aspose.word 23.8 ,麻烦帮看下是否可以优化处理。谢谢。
2025年奇瑞集团KD车身包装生产线及登车桥年度框架协议.docx (51.1 KB)
错误的现象如截图所示:
实际应该是以下的截图:
概要
使用 Aspose.Words for Java(如 23.8 版)将 WPS 生成的 DOCX 转为 PDF 时,表格行的高度有时会被压缩,导致单元格内容被截断。官方文档确认 Aspose.Words 能完成 DOCX→PDF 的转换,并提供了多种保存选项和表格操作 API,但未明确说明该现象的根本原因。因此以下内容基于常见的表格渲染设置提供可能的排查思路,实际效果需自行验证。
可能的原因(推测)
HeightRule 为 AUTO 或 AT_LEAST,在渲染为 PDF 时引擎会重新计算行高,可能出现高度被压得过小的情况。AutoFit 会尝试压缩行高以适配页面宽度,进而导致行高变窄。PdfSaveOptions(如 optimizeOutput)在默认情况下会对布局进行压缩,可能影响表格的实际显示。可尝试的处理步骤
Document doc = new Document("input.docx");
for (Table table : (Iterable<Table>) doc.getChildNodes(NodeType.TABLE, true)) {
for (Row row : table.getRows()) {
// 将高度规则改为 EXACTLY,防止自动收缩
row.getRowFormat().setHeightRule(HeightRule.EXACTLY);
// 如原高度为 0,则设一个合理的默认值(单位:点)
double height = row.getRowFormat().getHeight();
if (height <= 0) {
height = 12; // 可根据实际内容调整
}
row.getRowFormat().setHeight(height);
}
}
for (Table table : (Iterable<Table>) doc.getChildNodes(NodeType.TABLE, true)) {
// 固定列宽,避免自动调整
table.autoFit(AutoFitBehavior.FIXED);
// 或者直接禁用自动适应
table.setAllowAutoFit(false);
}
PdfSaveOptions pdfOpts = new PdfSaveOptions();
pdfOpts.setUsePdfDocumentStructure(true); // 保持文档结构
pdfOpts.setOptimizeOutput(false); // 关闭尺寸优化
// 其他常用选项,可根据需要开启
// pdfOpts.setCompliance(PdfCompliance.PDF_A_1B);
// pdfOpts.setEmbedStandardFonts(true);
doc.save("output.pdf", pdfOpts);
尝试升级 Aspose.Words 版本
如果条件允许,可先升级到最新的 24.x 版或更高版本,再使用相同代码进行转换。新版中已修复若干表格渲染相关的问题,可能直接解决高度被压缩的现象。
验证与排查
HeightRule 与 Height,确认已被正确设置。后续行动(建议执行顺序)
PdfSaveOptions。备注:上述方案基于 Aspose.Words 官方文档中提供的 API(如 RowFormat、AutoFitBehavior、PdfSaveOptions)推断而来,文档未明确说明该现象的具体根因,实际效果可能因文档结构或字体等因素而异,建议在测试环境中逐步验证。
@effort 发生这种情况是因为您为当前表指定了行高。
您可以在文档中取消选中此选项,也可以用以下代码修复它:
Document doc = new Document("input.docx");
NodeCollection tables = doc.getChildNodes(NodeType.TABLE, true);
for (Table table : (Iterable<Table>) tables) {
for (Row row : table.getRows()) {
RowFormat rowFormat = row.getRowFormat();
if (rowFormat.getHeightRule() == HeightRule.EXACTLY ||
rowFormat.getHeightRule() == HeightRule.AT_LEAST) {
rowFormat.setHeightRule(HeightRule.AUTO);
rowFormat.setHeight(0);
}
}
}
doc.save("output.pdf");