Excel打印线条缺失

excel转pdf问题.zip (34.0 KB)

在使用25.4版本的apose.cells去打印一个excel文档,打印完成后发现有线条的缺失。虚拟打印机Foxit以及实际打印的都存在这个问题。后尝试将excel转pdf,发现同样是有问题。这里提供了转pdf的代码以及相关输入和输出的文件,请帮忙复现排查一下是什么问题。

@zou_yw

概要
在使用 Aspose.Cells 25.4 将 Excel 工作簿打印或保存为 PDF 时,部分线条(尤其是手绘线条、文本框等 Shape)可能在输出中缺失。这是该版本渲染某些绘图对象时的已知缺陷。

出现原因

  1. Shape 渲染缺陷 – 25.4 版在转换为 PDF(或打印)时,可能会忽略 TextBox、线条等 Shape,导致它们在最终文档中不显示。官方论坛已有 “TextBox 转 PDF 丢失” 的案例。
  2. 未对 Shape 做预处理 – 某些 Shape(如 TextBox)在转换前需要手动开启文字换行、调整尺寸等属性,否则渲染引擎会把它们当作空对象跳过。
  3. 版本缺陷 – 该缺陷已在后续的 25.5/25.6 以及 26.x 版本中修复,升级后大多数线条都会正常显示。

解决步骤

  1. 确认缺失的线条类型
  • 打开原始 Excel,检查缺失的是网格线还是手动绘制的线条/文本框。若是后者,重点检查 Worksheet.Shapes 集合。
  1. 在保存/打印前对 Shape 进行必要的属性设置
// 加载工作簿
var workbook = new Aspose.Cells.Workbook(inputPath);

// 遍历所有工作表的 Shape,针对 TextBox 做预处理(示例)
foreach (var sheet in workbook.Worksheets)
{
 foreach (Aspose.Cells.Drawing.Shape shape in sheet.Shapes)
 {
 if (shape.MsoDrawingType == Aspose.Cells.Drawing.MsoDrawingType.TextBox)
 {
 // 开启文字换行,防止渲染时被忽略
 shape.IsTextWrapped = true;

 // 根据所在行的高度动态调整 Shape 高度(可选)
 int rowIdx = shape.UpperLeftRow;
 shape.Height = sheet.Cells.GetRowHeightPixel(rowIdx) * 3;
 }
 }
}

// 保存为 PDF(或直接打印)
var pdfOptions = new Aspose.Cells.PdfSaveOptions();
workbook.Save(outputPdfPath, pdfOptions);
// 若要直接打印:
// workbook.Print();

上述代码来源于 Aspose 官方论坛的解决方案,能够让大多数 TextBox/线条在 PDF 中正确显示。

  1. 若缺失的是网格线(而非 Shape),可在打印选项中显式打开网格线:
var printOptions = new Aspose.Cells.PrintOptions { PrintGridlines = true };
workbook.Print(printOptions);

此步骤并非导致当前缺失的根本原因,但可确保网格线在需要时被渲染。

  1. 升级 Aspose.Cells
  • 该渲染缺陷已在 25.4 之后的版本中修复。建议升级到最新的 26.x(或至少 25.6)版本,再次执行第 2 步检查是否仍有缺失。
  1. 验证输出
  • 生成 PDF 或打印后,仔细对比原始 Excel,确认所有预期的线条、文本框均已出现。
  • 如仍有缺失,请提供:
  1. 完整的代码片段(包括加载、遍历 Shape、保存/打印的所有选项)。
  2. 示例 Excel 文件(包含缺失线条的工作表)。
  3. 运行环境信息(.NET 版本、操作系统、CPU 架构)。

总结
缺失的线条大概率是因为 Aspose.Cells 25.4 在渲染 Shape 时的缺陷。通过在保存前对 TextBox 等 Shape 设置 IsTextWrapped 并适当调整尺寸,或直接升级到更高版本,通常可以解决该问题。

@zou_yw,

感谢提供模板文件和截图。

根据您提到的情况,我通过将您的模板Excel文件转换为PDF复现了该问题。在Excel打印输出或Aspose.Cells的PDF渲染中,我发现了一些丢失的线条。我使用了最新版本/修复版(Aspose.Cells for Java 25.11),但问题仍然存在。

我们需要对该问题进行深入评估。我们已在内部问题跟踪系统中创建了以下新工单,并将在Free Support Policies中提到的条款下交付问题的修复。

问题ID:CELLSJAVA-46554

如果您需要优先支持以及直接与我们的付费支持管理团队联系,可以访问Paid Support Services

@zou_yw
这是因为列H 被隐藏 并且H3 没有左边框导致的问题。
我们会尽快研究这个问题。
你可以考虑删除这个隐藏列作为临时解决方案。