2009-12-21 4 views
10

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

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

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

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

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

Благодаря

+0

гав ... Вы можете иметь проблемы там. .. – Jason

+0

это может помочь кому-то еще, поскольку у меня возникла проблема, когда свободный текст не был сплющен, в котором iTextSharp имеет отдельную настройку для этого: 'stamper.FreeTextFlattening = true;' – jtate

ответ

6

Просто установка .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(); 
    } 
+0

Спасибо, это помогло мне с аналогичным проблема. – Tigran

8

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

Работает отлично.

3

Я думаю, что эта проблема так же с этим: AcroForm values missing after flattening

На основании ответа, это должно сделать трюк:

pdfStamper.FormFlattening = true; 
pdfStamper.AcroFields.GenerateAppearances = true; 
+0

Это простое изменение добавления 'pdfStamper.AcroFields.GenerateAppearances = true;' тоже работало. Гораздо проще, чем другое решение массива байтов. – FirstDivision

Смежные вопросы