c# - iTextSharp GetFieldPositions 到 SetSimpleColumn

标签 c# .net pdf itext

我正在使用此处找到的最新版本的 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/

相关文章:

c# - 即使 c++ dll/native 插件中有 exit(1),如何保留我的 unity3d 程序 (c# v3.5)?

c# - 这些 .NET 自动生成的表适配器命令有什么作用?例如UPDATE/INSERT 后跟 SELECT

.net - 从 t4 预处理文本模板生成多个输出

jquery - Mac 上的 Fancybox + Firefox

c# - 使用 DataStax C# 驱动程序时故障转移不适用于 Cassandra

c# - 如何创建一个Windows App(C#),在其中可以在消息框中显示各种对象中的所有异常

c# - .net c# postback 覆盖绑定(bind)的文本框

c# - 如何将按键发送到正在运行的进程对象?

PHP : How to change page title of PDF in browser

java - 如何在java中编辑PDF属性?