2015-06-08 3 views
0

Мне нужно удалить все поля формы pdf, поэтому я использую iText и пытаюсь сгладить PDF.Как сгладить PDF с помощью Itext в C#?

Из-за унаследованного кода я ограничен IText версии 4.1.6.1

Мой код:

public static byte[] RemoveAcroFields(String filename) 
    { 
     if (filename != null && File.Exists(filename)) 
     { 

      byte[] pdfFile = File.ReadAllBytes(filename); 
      PdfReader reader = new PdfReader(pdfFile); 
      MemoryStream stream = new MemoryStream(pdfFile); 
      PdfStamper stamper = new PdfStamper(reader, stream); 

      stamper.FormFlattening = true; 
      stamper.Close(); 

      var flattenedPdfBytes = stream.ToArray(); 

      reader.Close(); 
      stream.Close(); 
      return flattenedPdfBytes;     

     } 
     else 
     { 
      return null; 
     }    
    } 

Это производит это исключение

bei System.IO.MemoryStream.set_Capacity(Int32 value) 
bei System.IO.MemoryStream.set_Capacity(Int32 value) 
    bei System.IO.MemoryStream.EnsureCapacity(Int32 value) 
    bei System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) 

Когда я раскомментировать stamper.close() no Исключение происходит, но полученный pdf не был сплющен

+1

Вы предоставили трассировку стека, но не исключение? Насколько велик ваш PDF-файл? – Paddy

+0

«Наследие» не является оправданием для использования версии iText, которая официально не была выпущена iText Group. Вы используете вилку, распространяемую людьми, которые, возможно, изменили iText таким образом, что это нарушает функциональность. Кроме того: те старые версии iText, предшествующие iText 5.3, не поддерживают большие файлы, поэтому вы можете обновить *, потому что теперь вам нужна дополнительная поддержка больших файлов PDF. * –

+0

Я добавил исключение ... PDF составляет всего 500 КБ –

ответ

1

На всякий случай у кого-то есть аналогичная проблема. Я мог бы решить это, изменив InputStream для PdfStamper из MemoryStream в FileStream. С этим изменением это сработало для меня.

public static void RemoveAcroFields(String filename) 
    { 
     if (filename != null && File.Exists(filename)) 
     {     
      byte[] pdfFile = File.ReadAllBytes(filename); 
      PdfReader reader = new PdfReader(pdfFile); 
      PdfStamper stamper = new PdfStamper(reader, new FileStream(filename, FileMode.Create)); 

      stamper.FormFlattening = true; 
      stamper.Close();            

      reader.Close(); 
     }    
    } 
Смежные вопросы