2009-12-04 54 views

Trả lời

7

Sau khi xem xét thêm, phán quyết trên trường bị đảo ngược. Hóa ra nếu bạn tạo hình phẳng, các trường không hiển thị trên tài liệu kết quả (vì chúng thiếu cài đặt 'xuất hiện'). BTW, làm phẳng hình dạng ngăn các chỉnh sửa tiếp theo của trường biểu mẫu. Bây giờ chúng ta có thể thêm sự xuất hiện vào biểu mẫu, tuy nhiên, một cách dễ dàng hơn là sử dụng lớp TextField và không lo lắng về việc thiết lập rõ ràng các đối tượng 'xuất hiện'.

public void ABetterWayToAddFormFieldToExistingPDF() 
{ 
    PdfReader reader = new PdfReader(@"c:\existing.pdf"); 

    FileStream out = new FileStream(@"C:\existingPlusFields.pdf", FileMode.Create, FileAccess.Write); 

    PdfStamper stamp = new PdfStamper(reader, out);   

    TextField field = new TextField(stamp.Writer, new iTextSharp.text.Rectangle(40, 500, 360, 530), "some_text"); 

    // add the field here, the second param is the page you want it on   
    stamp.AddAnnotation(field.GetTextField(), 1); 

    stamp.FormFlattening = true; // lock fields and prevent further edits. 

    stamp.Close(); 
} 
+2

Các trường được thêm bằng AddAnotation thì không được làm phẳng, xem chú thích trên thuộc tính Formflattening trong mã nguồn của itextsharp http://sourceforge.net/p/itextsharp/code/453/tree/trunk/src/core/iTextSharp/text /pdf/PdfStamper.cs –

2

tôi vật lộn với điều này cho một lúc để figured tôi muốn gửi câu hỏi & trả lời

Sử dụng lớp PdfStamper iText là chìa khóa. (Tôi đoán điều này làm cho một bản sao nhưng nó sạch hơn nhiều so với sử dụng các lớp PdfCopy itext).

public void AddFormFieldToExistingPDF() 
{ 
    PdfReader reader = new PdfReader(@"c:\existing.pdf"); 

    FileStream out = new FileStream(@"C:\existingPlusFields.pdf", FileMode.Create, FileAccess.Write); 

    PdfStamper stamp = new PdfStamper(reader, out);   

    PdfFormField field = PdfFormField.CreateTextField(stamp.Writer, false, false, 50); 

    // set a field w/some position and size 
    field.SetWidget(new iTextSharp.text.Rectangle(40, 500, 360, 530), 
      PdfAnnotation.HIGHLIGHT_INVERT); 

    field.SetFieldFlags(PdfAnnotation.FLAGS_PRINT); 
    field.FieldName = "some_field"; 

    // add the field here, the second param is the page you want it on 
    stamp.AddAnnotation(field, 1);       
    stamp.Close(); 
} 
+0

Mã của tôi rất giống với của bạn. Trường chữ ký hoạt động hoàn toàn bình thường trên màn hình, nhưng khi tôi cố gắng in nó, nó hiển thị trống trên giấy. Điều này xảy ra với bạn? – Haoest

0

Sử dụng pdfStamper bạn có thể hoàn thành nó.

PdfStamper Stamper= new PdfStamper(new PdfReader(sourcefile), File.Create(NewOutputFile)); 

TextField moreText = new TextField(Stamper.Writer, 
          new iTextSharp.text.Rectangle(20, 20, 590, 780), "moreText"); 

      moreText.Visibility = TextField.VISIBLE_BUT_DOES_NOT_PRINT; 
      moreText.Text = "Use this space for any additional information"; 
      moreText.Options = (TextField.MULTILINE); 

PdfFormField Fieldtxt = moreText.GetTextField(); 

Stamper.AddAnnotation(Fieldtxt, n); 
Các vấn đề liên quan