Как сгладить уже заполненную форму PDF с помощью iTextSharp

Я использую iTextSharp для объединения нескольких файлов PDF вместе в один файл.

Я использую метод, описанный в официальных учебниках iTextSharp, здесь, который объединяет файлы по страницам через PdfWriter и PdfImportedPage.

Оказывается, некоторые из файлов, которые мне нужно объединить, заполняются PDF-формами, и использование этого метода слияния данных формы теряется.

Я вижу несколько примеров использования PdfStamper для заполнения форм и их сглаживания.

То, что я не могу найти, - это способ сгладить уже заполненную форму PDF и, надеюсь, объединить ее с другими файлами, не сохраняя при этом сначала сглаживание версии.

Спасибо

Ответ 1

Просто настройка .FormFlattening на PdfStamper не была достаточной... Я закончил использование PdfReader с байтовым массивом содержимого файла, который я использовал для штамповки/сглаживания данных, чтобы получить массив байтов, чтобы добавить новый PdfReader. Вот как я это сделал. теперь отлично работает.

 private void AppendPdfFile(FileDTO file, PdfContentByte cb, iTextSharp.text.Document printDocument, PdfWriter iwriter) 
  {
     var reader = new PdfReader(file.FileContents);

     if (reader.AcroForm != null)
        reader = new PdfReader(FlattenPdfFormToBytes(reader,file.FileID));

     AppendFilePages(reader, printDocument, iwriter, cb);
  }

  private byte[] FlattenPdfFormToBytes(PdfReader reader, Guid fileID)
  {
     var memStream = new MemoryStream();
     var stamper = new PdfStamper(reader, memStream) {FormFlattening = true};
     stamper.Close();
     return memStream.ToArray();
  }

Ответ 2

При создании файлов, которые нужно объединить, я изменил этот параметр: pdfStamper.FormFlattening = true;

Отлично работает.