2011-08-17 48 views
2

我使用iTextSharp的最新版本在這裏找到:http://sourceforge.net/projects/itextsharp/iTextSharp的GetFieldPositions到SetSimpleColumn

我試圖讓使用GetFieldPositions(字段名)一些AcroFields的位置後使用ColumnText.SetSimpleColumn。

我可以找到的所有示例顯示GetFieldPositions返回一個float [],但是這似乎不再是這種情況。它現在似乎正在返回IList(根據Visual Studio)隱式轉換爲float []。

在0索引處的返回值內部是一個Rectangle的位置成員,但由於我見過的例子在返回的float []上執行數學運算我不確定返回值中的值是什麼GetFieldPostions在使用SetSimpleColumn時使用。這裏是我參考的一篇文章:http://blog.dmbcllc.com/2009/07/08/itextsharp-html-to-pdf-positioning-text/

最簡單的接受答案將是如何將值從GetFieldPositions轉換爲SetSimpleColumn。

謝謝!

回答

8

我認爲這是有兩個原因。 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; 
} 
+0

正是我一直在尋找,謝謝! –