Cách thêm trường biểu mẫu vào pdf hiện có với itextsharp?Làm cách nào để thêm trường biểu mẫu vào pdf hiện có với itextsharp?
Tôi có tài liệu pdf hiện có, tôi muốn thêm các trường biểu mẫu vào tài liệu mà không cần tạo bản sao và viết tài liệu mới.
Cách thêm trường biểu mẫu vào pdf hiện có với itextsharp?Làm cách nào để thêm trường biểu mẫu vào pdf hiện có với itextsharp?
Tôi có tài liệu pdf hiện có, tôi muốn thêm các trường biểu mẫu vào tài liệu mà không cần tạo bản sao và viết tài liệu mới.
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();
}
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();
}
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
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 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 –