我正在使用此处找到的最新版本的 iTextSharp:http://sourceforge.net/projects/itextsharp/
在使用 GetFieldPositions(fieldName) 获取某些 AcroField 的位置后,我尝试使用 ColumnText.SetSimpleColumn。
我能找到的所有示例都显示 GetFieldPositions 返回一个 float[],但是这似乎不再是这种情况了。它现在似乎正在返回 IList,它不会(根据 Visual Studio)隐式转换为 float[]。
在 0 索引处的返回值内部是一个位置成员,它是一个矩形,但由于我看到的示例对返回的 float[] 执行数学运算,我不确定 GetFieldPostions 中的返回值的值是什么在使用 SetSimpleColumn 时使用。这是我引用的一篇文章:http://blog.dmbcllc.com/2009/07/08/itextsharp-html-to-pdf-positioning-text/
可接受的最简单答案是如何将值从 GetFieldPositions 转换为 SetSimpleColumn。
谢谢!
最佳答案
我认为这样做有两个原因。 1), GetFieldPositions()
实际上可以返回多个项目,因为从技术上讲,您可以拥有多个同名字段,并且 2),原始数组方法需要知道“魔术数组数字”才能找到是什么什么。您看到的所有代码都假定 GetFieldPositions()
仅返回一个项目,这在 99% 的情况下都是正确的。您现在可以使用普通属性,而不是使用索引。
所以您发布的链接中的代码:
float[] fieldPosition = null;
fieldPosition = fields.GetFieldPositions("fieldNameInThePDF");
left = fieldPosition[1];
right = fieldPosition[3];
top = fieldPosition[4];
bottom = fieldPosition[2];
if (rotation == 90)
{
left = fieldPosition[2];
right = fieldPosition[4];
top = pageSize.Right - fieldPosition[1];
bottom = pageSize.Right - fieldPosition[3];
}
应转换为:
IList<AcroFields.FieldPosition> fieldPositions = fields.GetFieldPositions("fieldNameInThePDF");
if (fieldPositions == null || fieldPositions.Count <= 0) throw new ApplicationException("Error locating field");
AcroFields.FieldPosition fieldPosition = fieldPositions[0];
left = fieldPosition.position.Left;
right = fieldPosition.position.Right;
top = fieldPosition.position.Top;
bottom = fieldPosition.position.Bottom;
if (rotation == 90)
{
left = fieldPosition.position.Bottom;
right = fieldPosition.position.Top;
top = pageSize.Right - fieldPosition.position.Left;
bottom = pageSize.Right - fieldPosition.position.Right;
}
关于c# - iTextSharp GetFieldPositions 到 SetSimpleColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7096093/