2013-08-22 50 views
0

我有一個要求,用戶在其中選擇動態生成的pdf大小。如何使用iTextSharp中的反射獲取值

要填充的iTextSharp的支持的所有尺寸,我列舉在下拉列表的所有尺寸爲

 System.Reflection.FieldInfo[] fi = typeof(iTextSharp.text.PageSize).GetFields(); 
     DropDownList1.DataSource = fi; 
     DropDownList1.DataBind(); 

每一件事情是確定的到這裏。 現在,當用戶選擇說信紙大小,我怎麼能使用這些信息來初始化它就像

var document = new Document(PageSize.LETTER); 

目前,我試圖讓它這樣,但其給出編譯錯誤類型初始化文件。

PageSize getpsize() 
{ 
     System.Reflection.FieldInfo[] fi = typeof(iTextSharp.text.PageSize).GetFields(); 
     int si = DropDownList1.SelectedIndex; 
     PageSize p = fi[si]; 
     return p; 
} 

請大家幫忙,因爲這是我第一次認真反思。

+0

其實你根本不用反射。 PageSize常量通常僅用於示例網站,而不是限制。只需提供您想要的任何尺寸。 – mkl

+0

「示例網站」應該是「示例大小」;有時我的智能手機不夠聰明,無法理解我......;) – mkl

回答

0
System.Reflection.FieldInfo[] fi = typeof(iTextSharp.text.PageSize).GetFields(); 

FieldInfo[]是字段元數據的數組,而不是對象本身。

所以,你得到必要的元數據後,你需要得到這樣的實際字段值:

FieldInfo field = fi[si]; 
PageSize size = (PageSize)field.GetValue(null); 

的GetValue(對象)返回字段的實際值。由於這些字段是靜態的,因此您傳遞null,因爲沒有特定的對象要查詢。

相關問題