2014-07-11 81 views
1

嗨我正在使用ITextSharp來創建PDF。這是我的代碼:如何使用ItextSharp動態添加文本框值?

private void FillForm() 
{ 
    _path = HttpContext.Current.Server.MapPath("~/") + "\\PDF"; 
    string formFile = _path + "\\Test.pdf"; 
    string newFile = _path + "\\Test2.pdf"; 

    var reader = new PdfReader(formFile); 
    using (var stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create))) 
    { 
     AcroFields fields = stamper.AcroFields; 

     var conn = new SqlConnection(DataManager.ConnectionString); 
     conn.Open(); 

     var command = new SqlCommand("SQLCommand"), conn); 
     var dt = new DataTable(); 
     var adapter = new SqlDataAdapter(command); 

     adapter.Fill(dt); 
     int rowIndex = 1; 
     for (int i=0; i < dt.Rows.Count; i++) 
     { 
      var name = (string)dt.Rows[i]["Parameter"]; 
      fields.SetField("txt_" + rowIndex, name); 
      rowIndex++; 
     } 

     stamper.FormFlattening = false; 
     stamper.Close(); 
    } 
} 

我有一個問題,當我試圖將用戶名填入文本框。我有一個從SQL查詢中得到的名稱列表,我想在不同的文本框中顯示它。 只有第一個文本框顯示其值。對於其他人我必須點擊文本框來查看裏面的值。

有沒有人有任何想法我可以解決它?

+0

你在哪裏/如何將它們添加到文本框?我看不到代碼片段在這裏有什麼相關性 – Sayse

+0

這裏我設置文本框的值: fields.SetField(「user_」+ rowIndex,name); – DID

+0

你以後使用什麼來查看文件,你有嘗試過不同的pdf閱讀器嗎? –

回答

0

一號線中缺少代碼:

fields.GenerateAppearances = true; 

您需要後,加入這行權:

AcroFields fields = stamper.AcroFields; 

這究竟是爲什麼?您的模板有些不對(可能是使用OpenOffice創建的):它表示用於填寫表單的軟件不應該生成字段的外觀。因此添加了該字段的(這通過點擊該文本時出現文本來證明),但缺少外觀(因此爲空白字段)。

+0

我添加了你的代碼,但沒有任何改變,外觀是再次丟失:( – DID

+0

請分享您的PDF文件 –

+0

我分享問題描述 – DID