2012-07-06 8 views
0

iTextSharp를 사용하여 PDF 템플릿을 읽은 다음 양식 채우기를 자동화하려고합니다. 템플릿은 LiveCycle Developer로 작성되었습니다. 다음 코드는 무엇이 잘못되었는지는 모르지만 양식 값은 변경되지 않습니다.서식 파일에서 양식을 읽고 iTextSharp로 채우려면 어떻게해야합니까?

누군가 내가 잘못하고있는 것을 말해 줄 수 있습니까? iText의 C# 버전에 대한 좋은 설명서를 찾는 것은 어렵습니다.

private void button_fill_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog ofd = new OpenFileDialog(); 
    if (ofd.ShowDialog() == DialogResult.OK) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      PdfReader pdfReader = new PdfReader(ofd.FileName); 
      PdfStamper pdfStamp = new PdfStamper(pdfReader, ms); 
      AcroFields fields = pdfStamp.AcroFields; 
      foreach (KeyValuePair<string, AcroFields.Item> f in fields.Fields) 
      { 
       // this message is never displayed 
       MessageBox.Show("key: " + f.Key); 
      } 

      //textfields 
      // this one is working, and showing the value saved in the template 
      MessageBox.Show("FakeDatabase_Table1_Company: " + fields.GetField("FakeDatabase_Table1_Company")); 
      // this part returns a false value, and not changing the field 
      MessageBox.Show("Set: " + fields.SetField("FakeDatabase_Table1_Company", "Testing")); 

      try 
      { 
       fields.SetField("FakeDatabase_Table1_Company", "Coca-Cola"); 
      } 
      catch (Exception e2) { MessageBox.Show(e2.Message); } 

      pdfReader.Close(); 
      pdfStamp.FormFlattening = true; 
      pdfStamp.FreeTextFlattening = true; 
      pdfStamp.Writer.CloseStream = false; 
      pdfStamp.Close(); 
      Process.Start(ofd.FileName); 
     } 
    } 
} 

은 try/캐치 .. 아무것도 출력하지 않으며 그것은 코드가 괜찮다고 밝혀 아무것도

답변

0

를 설정하지 않았다. 문제는 PDF가 동적이었습니다. 내가 pdf를 정적으로 변경 한 이후로 내 코드가 거의 작동하고있다. 이제 AcroFields에서 읽을 수 있습니다.이 점이 저에게이 문제를 알려줍니다. 아직 채워진 값으로 양식을 저장하는 것은 아니지만 지금까지 내가 가진 것입니다.

public void loadPDF(String path) 
     { 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       PdfReader pdfReader = new PdfReader(path); 
       PdfStamper pdfStamp = new PdfStamper(pdfReader, ms); 
       AcroFields fields = pdfStamp.AcroFields; 
       List<String> Keys = new List<string>(); 
       Boolean empty = true; 
       foreach (var field in fields.Fields) 
       { 
        empty = false; 
        Keys.Add(field.Key); 
       } 
       if (empty) MessageBox.Show("The template does not have any form fields in it."); 
       foreach (String k in Keys) 
       { 
        fields.SetField(k, "Testing"); 
       } 

       pdfReader.Close(); 
       pdfStamp.FormFlattening = true; 
       pdfStamp.FreeTextFlattening = true; 
       pdfStamp.Writer.CloseStream = false; 
       pdfStamp.Close(); 
       Process.Start(path); 
      } 
     } 
+0

이 답변으로 표시 할 수 있습니다. 관련 코드 줄을 포함해도 될까요? – Adam

+0

관련 코드 줄이 없었으므로 LiveCycle과 함께 PDF를 저장할 때 옵션입니다. 나는 당신이 물어 봤기 때문에 개정 된 코드를 포함 시켰지만, 구 버전과도 잘 작동 할 것이다. – Mike