aspose.cell,输出pdf,文本框中文本与在Excel中显示效果不一致。

aspose.cell,Excel文件保存为pdf,文本框中文本与在Excel中显示效果不一致。CalculateTextSize计算的文本高度也没超过文本框,但是输出pdf时文本已溢出文本框
testPdf.zip (256.2 KB)

 public static void testHeight()
 {
     //CellsHelper.DPI = 168;
     Workbook workbook = new Workbook("D:\\input_testPdf.xlsm");
     Worksheet sheet = workbook.Worksheets["sheet1"];

     foreach (Shape shape in sheet.Shapes)
     {
         // 判断形状是否为文本框
         if (shape is Aspose.Cells.Drawing.TextBox)
         {
             Aspose.Cells.Drawing.TextBox textBox = (Aspose.Cells.Drawing.TextBox)shape;

             // 判断文本框的名称是否以"批注文本框"开头
             if (textBox.Name.StartsWith("批注文本框"))
             {
                 // 获取文本框的高度
                 double textBoxHeight = textBox.Height;
                 Console.WriteLine("textBoxHeight:" + textBoxHeight);

                 int[] estimatedTextHeight = textBox.CalculateTextSize();
                 Console.WriteLine("estimatedTextHeight:" + estimatedTextHeight[1]);

  

                 // 检查是否溢出
                 if (estimatedTextHeight[1] > textBoxHeight)
                 {
                     throw new OverflowException(
                         $"{sheet.Name}文本框内容溢出,请调整内容!"
                     );
                 }

             }
         }
     }

     workbook.Save("d:\\output_test.pdf");

 }

@lingtian

感谢您提供的样本文件,这有助于复现问题。我们尚未确认此问题,只有在我们这边复现后才能确认。根据您的描述,这可能是 Aspose.Cells 在将 xlsm 转换为 pdf 时的一个 bug。为了确认并在内部记录此问题,我需要一些细节。

  • 您使用的 Aspose.Cells for .NET 具体版本号是?
  • 运行代码的 .NET 运行时(如 .NET Framework 4.x、.NET Core/5/6 等)和操作系统版本是什么?
  • 在保存 PDF 时是否使用了自定义的 PdfSaveOptions(例如设置 Compliance, EmbedStandardFonts 等)?如果有,请提供相关设置。

我们会把这些信息转给支持工程师,稍后会在此线程中回复您。

我会尝试使用你的样本复现此问题。如果确认成功,我会在内部记录并在此处跟进。

如有需要,支持工程师将在此线程中跟进。

@lingtian

感谢您提供的模板Excel文件和测试代码。我们确实复现了你遇到的问题。

我们已在内部问题跟踪系统中创建以下新工单,并将根据 Free Support Policies 中所述的条款进行修复。

问题 ID:CELLSNET-59846

如果您需要优先支持,并希望直接联系我们的付费支持管理团队,您可以获取 Paid Support Services

@lingtian
您的问题(CELLSNET-59846)已得到解决,修复后的功能将随版本26.3一起发布。
需要注意的是:样例文件中的文本在通过Excel生成的PDF文件中,文本是显示不完全的。我们基于无限逼近Excel生成的PDF效果进行了修复。
这是我使用最新功能生成的结果文件:
CELLSNET-59846.pdf (31.9 KB)

@duojie.yang 是否可以做到跟Excel中显示的效果一致? 这样可能效果更好一点。

@lingtian
Aspose.Cells生成PDF以Excel生成的pdf为准。你可以通过另存Excel文件为PDF得到验证(File → Save As → PDF)。

@duojie.yang 是否可以给一个选项,可以选择与Excel生成pdf的一致,或者与在Excel中显示的一致?我其实是希望得到pdf与打开Excel看到的效果一致。

@duojie.yang 因为我是先编辑Excel再输出pdf,我希望输出的pdf与Excel中显示的一致,否则,我无法保证输出的pdf是否显示了所有完整的内容。

@lingtian
针对您的需求,我们研究了现有的选项和pdf生成逻辑,发现目前暂时无法满足您的预期要求。对此我们深表歉意。您的预期是一个值得关注的功能,我们会在未来的开发中考虑开发。
这里有两个临时的解决方案希望对您有所帮助:
1 编辑时,尽量不要让文本框的高度刚好装下文本内容,预留一定的空间。
2 基于打印预览编辑(推荐
1)编辑内容
2)查看一下打印预览,如果不符合预期,返回调整文本框高度(File → Print)
反复执行1) 和 2),直到达到预期为止。

@duojie.yang 那是否可以增加一个计算输出pdf时的文本高度的函数?目前CalculateTextSize()是计算Excel中文本显示时的高度。

@lingtian
经过我们的研究,我们可能暂时无法提供这样的接口。
PDF 输出使用的是基于PDF 渲染引擎的另一套排版和字体度量机制。
由于 PDF 文本高度依赖最终渲染阶段的排版结果,若要单独提供计算接口,需要引入与 PDF 导出等价的预渲染流程。即本质上需要提前执行一遍与 PDF 渲染等价的排版流程。要完成这样的接口非常复杂且短时间内无法实现。我们将继续研究您的需求,以期找到相对简单的解决方案,并在未来提供这样的接口。对此给您带来不便,我们深表歉意。一旦我们取得进展将会第一时间通知您。