iTextSharp GetFieldПозиционирует в SetSimpleColumn - PullRequest
2 голосов
/ 17 августа 2011

Я использую последнюю версию iTextSharp, найденную здесь: http://sourceforge.net/projects/itextsharp/

Я пытаюсь использовать ColumnText.SetSimpleColumn после получения позиции некоторых AcroFields с помощью GetFieldPositions (fieldName).

Все примеры, которые я могу найти, показывают, что GetFieldPositions возвращает float [], однако, похоже, это уже не так.Теперь кажется, что он возвращает IList, который (согласно Visual Studio) неявно не конвертируется в float [].

Внутри возвращаемого значения в индексе 0 находится элемент position, представляющий собой Rectangle, но так какпримеры, которые я видел, выполняют математические операции с возвращаемым float []. Я не уверен, какие значения из возвращаемого значения в GetFieldPostions использовать при использовании SetSimpleColumn.Вот одна статья, на которую я ссылаюсь: http://blog.dmbcllc.com/2009/07/08/itextsharp-html-to-pdf-positioning-text/

Самый простой принятый ответ - как перевести значение из GetFieldPositions в SetSimpleColumn.

Спасибо!

1 Ответ

8 голосов
/ 18 августа 2011

Я думаю, что это было сделано по двум причинам.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;
}
...