Как добавить поле формы к существующему PDF с itextsharp?

Я нахожу Ghost Doc быть очень полезным.

GhostDoc является свободным дополнением для Visual Studio, которая автоматически генерирует комментарии документации XML для C#. Или при помощи существующей документации, наследованной от базовых классов или при помощи реализованных интерфейсов, или путем выведения комментариев из имени и типа, например, методов, свойств или параметров.

12
задан Bobrovsky 16 April 2013 в 18:15
поделиться

2 ответа

После дальнейшего рассмотрения решение на поле было отменено. Оказывается, если вы сгладите штамп, поля не будут отображаться в итоговом документе (из-за отсутствия настроек внешнего вида). Кстати, выравнивание формы предотвращает дальнейшее редактирование поля формы. Теперь мы можем добавить внешний вид к форме, однако более простой способ - использовать класс 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();
}
7
ответ дан 2 December 2019 в 22:22
поделиться

Я боролся с этим некоторое время, поэтому решил, что опубликую вопрос и ответ

Использование класса 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();
}
2
ответ дан 2 December 2019 в 22:22
поделиться