簡體   English   中英

如何使用iText / Sharp從AcroFields獲取TextField?

[英]How do I get a TextField from AcroFields using iText/Sharp?

我正在使用iTextSharp遍歷AcroFields集合中的字段,因此可以在注釋上設置各種屬性。 我已經研究出如何為每個注釋字段提取大多數屬性,但是希望能夠將單個注釋轉換為正確的字段對象(即TextFieldPushButtonFieldRadioCheckField等)。

除了創建一個新的TextField ,讀取然后設置與之關聯的所有設置/屬性之外,還有一種簡潔的方法可以達到:

int index = 0;
AcroFields acroFields = stamper.AcroFields;
TextField tf = acroFields.GetTextField(acroField.Key.ToString(), index);

我使用的是iTextSharp(4.0.6.0)的舊版本。 我無法升級到最新版本,因為4到5之間有重大更改。

附加信息:我的PDF文件具有多個重復字段(例如,兩個頁面都有客戶名稱),因此僅使用鍵名來設置屬性可能會產生意想不到的副作用。 一個字段可能被對齊,而另一個字段居中。

不幸的是,不, TextFieldPushButtonField和其他元素都是iText用於文檔創建的抽象的一部分,並且沒有內置的方法可以將AcroFields.Item對象恢復為其中之一。

您可以在迭代AcroFields時使用GetFieldType() 但並非所有屬性都可以更改。 讓我知道是否有任何問題。

AcroFields acroFields = reader.AcroFields;
foreach (KeyValuePair<String, AcroFields.Item> field in acroFields.Fields)
{
    // Check to see if it is the type we want.
    Boolean isTextField = (AcroFields.FIELD_TYPE_TEXT == acroFields.GetFieldType(field.Key));

    if (isTextField)
    {
        // Change the text.
        acroFields.SetField(field.Key, "new  string");
    }
}

可用的常量int字段類型為:

public const int FIELD_TYPE_CHECKBOX = 2;
public const int FIELD_TYPE_COMBO = 6;
public const int FIELD_TYPE_LIST = 5;
public const int FIELD_TYPE_NONE = 0;
public const int FIELD_TYPE_PUSHBUTTON = 1;
public const int FIELD_TYPE_RADIOBUTTON = 3;
public const int FIELD_TYPE_SIGNATURE = 7;
public const int FIELD_TYPE_TEXT = 4;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM