Как сгладить уже заполненную форму 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;
Отлично работает.
Ответ 3
Я думаю, что эта проблема такая же: Значение AcroForm отсутствует после сглаживания
Основываясь на ответе, это должно сделать трюк:
pdfStamper.FormFlattening = true;
pdfStamper.AcroFields.GenerateAppearances = true;