Слияние PDF-формы с itext. c#

#c# #pdf #itext

#c# #PDF #itext

Вопрос:

Мне нужно объединить 2 формы PDF в одну. Входные PDF-файлы имеют заполняемые поля, и выходные данные также должны содержать те же поля. Мне удалось добиться этого, но, когда я объединяю PDF-файлы с одинаковым значением для полей, только первое поле появляется как поле, а второе выравнивается. (Допустим, в pdf 1 есть поля ‘Name’ и ‘Comment1’; в pdf 2 есть поля ‘Name’ и ‘Comment2’; когда я объединяю, в выходном PDF-файле 2-е поле ‘Name’ выравнивается.)

      _stamp = new PdfStamper(_reader, pdfStream);

         AcroFields fields = _stamp.AcroFields;

            if (!(fields == null))
                    {
                    _stamp.FormFlattening = false;

                    }

                    _stamp.Close();
                    _stamp = null;
 

Ответ №1:

В вашем коде вы используете PdfStamper . Это класс для заполнения форм, а не для их объединения. Слияние форм выполняется с помощью PdfCopy :

 public void createPdf(String filename, PdfReader[] readers) throws IOException, DocumentException {
    Document document = new Document();
    PdfCopy copy = new PdfCopy(document, new FileOutputStream(filename));
    copy.setMergeFields();
    document.open();
    for (PdfReader reader : readers) {
        copy.addDocument(reader);
    }
    document.close();
    for (PdfReader reader : readers) {
        reader.close();
    }
}
 

Вы можете найти полные примеры кода здесь. Вам придется адаптировать его к C # (имена методов немного отличаются, но код похож).

Очень важно, чтобы вы не забыли сообщить PdfCopy , что хотите объединить поля, иначе форма не будет скопирована.

Вы объясняете, что у вас есть поле с именем Name в одном PDF-файле и поле с именем Name в другом. Если вы объедините обе формы, это приведет к созданию одного поля Name только с одним значением. У вас не может быть поля Name на одной странице с одним значением и поля Name на другой странице с другим значением. Вот почему мы также предоставляем образец, в котором поля переименованы. Вы можете найти этот пример здесь. Вам, вероятно, не нужен этот пример; я добавляю его только для полноты картины.

Комментарии:

1. Спасибо, Бруно, ваши примеры очень помогли!!