#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. Спасибо, Бруно, ваши примеры очень помогли!!