由于 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 中设置的高度,而不需要重新计算它。
希望这将在下一个版本中得到修复。:)
问候约什