0

由于 iText7 DotNet ImageRenderer 中的浮点运算,我遇到了一个无限循环问题。我已将 2464x3692 像素的图像添加到 523x770 像素的 PDF 页面区域,导致 Layout() 函数无限循环,因为每次迭代都返回 LayoutResult.NOTHING。

主要问题是图像高度是在 Layout-function 内部使用以下语句计算的:

Line 90: height = (float)width / imageWidth * imageHeight;

由于浮点运算,高度的值类似于 770.0001。这大于区域高度,导致循环返回 LayoutResult.NOTHING,因此图像再次自动缩放。在 AutoScale 函数内,仅检查图像宽度,它位于区域边界内,因此没有缩放。

我通过更改 ImageRenderer.cs 中的以下代码解决了这个问题:

90 - height = (float)width / imageWidth * imageHeight;
90 + float? propHeight = RetrieveHeight();
91 + height = propHeight == null ? (float)width / imageWidth * imageHeight : propHeight.Value;

214 - SetProperty(Property.HEIGHT, UnitValue.CreatePointValue(area.GetBBox().GetHeight()));
215 + SetProperty(Property.HEIGHT, area.GetBBox().GetHeight());

ImageRenderer 现在使用在 AutoScale 中设置的高度,而不需要重新计算它。

希望这将在下一个版本中得到修复。:)

问候约什

4

0 回答 0