Я нахожу Ghost Doc быть очень полезным.
GhostDoc является свободным дополнением для Visual Studio, которая автоматически генерирует комментарии документации XML для C#. Или при помощи существующей документации, наследованной от базовых классов или при помощи реализованных интерфейсов, или путем выведения комментариев из имени и типа, например, методов, свойств или параметров.
После дальнейшего рассмотрения решение на поле было отменено. Оказывается, если вы сгладите штамп, поля не будут отображаться в итоговом документе (из-за отсутствия настроек внешнего вида). Кстати, выравнивание формы предотвращает дальнейшее редактирование поля формы. Теперь мы можем добавить внешний вид к форме, однако более простой способ - использовать класс TextField и не беспокоиться о явной настройке объектов «внешнего вида».
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();
}
Я боролся с этим некоторое время, поэтому решил, что опубликую вопрос и ответ
Использование класса itext PdfStamper является ключевым. (Я предполагаю, что это создает копию, но это намного чище, чем использование классов 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();
}