2016-08-25 4 views
0

Я пытаюсь объединить и сжать PDF-файлы с помощью библиотеки bitmiracle.docotic.pdf (пробная версия), а для объединенного файла размером 700 МБ я столкнулся с «исключением из памяти», ниже мой кодСлияние PDF и сжатие файлов .net

/// <summary> 
    /// Open file for copy. 
    /// </summary> 
    /// <param name="file">File name.</param> 
    /// <param name="outputDocument">Output pdf document.</param> 
    private void OpenFileForCopy(string file, PdfDocument outputDocument) 
    { 
     if (isFirstFile) 
     { 
      outputDocument.Open(file); 
     } 
     else { 
      outputDocument.Append(file); 
     } 
    } 

    /// <summary> 
    /// Saves PDF merged pdf file to location specified. 
    /// </summary> 
    /// <param name="outputDocument">Merged pdf document.</param> 
    /// <param name="path">Path to be stored.</param> 
    /// <param name="source">Source of file.</param> 
    /// <param name="Number">Number.</param> 
    private string[] SavePDF(PdfDocument outputDocument, string path, string source, string Number) 
    { 
     string[] result = new string[2]; 
     outputDocument.PageLayout = PdfPageLayout.SinglePage; 
     string newPath = path + "_" + "Merged"; 
     string nor= Number.Substring(1); 
     Directory.CreateDirectory(newPath); 
     newPath += "\\Stmt" + source + nor+ ".pdf"; 
     outputDocument.SaveOptions.Compression = BitMiracle.Docotic.Pdf.PdfCompression.Flate; 
     outputDocument.SaveOptions.UseObjectStreams = true; 
     outputDocument.SaveOptions.RemoveUnusedObjects = true; 
     outputDocument.SaveOptions.OptimizeIndirectObjects = false; 
     outputDocument.SaveOptions.WriteWithoutFormatting = true; 

     outputDocument.Save(newPath); 
     outputDocument.Dispose(); 
     isFirstFile = true; 
     result[0] = source ; 
     result[1] = Convert.ToString(fileCount); 
     fileCount = 0; 
     return result; 
    } 

экземпляр PdfDocument случается быть использован по методам

Пожалуйста, дайте мне знать, если что-нибудь нужно модифицированные

Спасибо, Kirankumar

+0

Просьба предоставить более подробную информацию о вашем процессе. Является ли ваш процесс 32-битным или 64-битным? Какую версию .NET Framework вы используете? Сколько файлов вы объединяете? – Bobrovsky

+0

его 64-битная машина, .net 4.6.1 и количество файлов отличается от 1 до 200, каждый файл будет иметь максимум 5 страниц –

ответ

0

Ваш код в порядке. Пожалуйста, обратите внимание, что объем памяти, потребляемой библиотекой, пропорционален общему размеру и количеству прилагаемых документов.

Я бы рекомендовал вам сохранять и повторно открывать документы время от времени, чтобы уменьшить объем памяти, потребляемой библиотекой. Вы также можете использовать следующую настройку для промежуточных сейвов.

outputDocument.SaveOptions.UseObjectStreams = false; 

Итак, я предлагаю вам попробовать следующий процесс:

  1. Открыть документ
  2. Append не более 10 (или другое число) документы
  3. Сохранить документ (промежуточное сохранение)
  4. Открыть документ, который вы только что сохранили
  5. Добавить следующую партию документов
  6. ...

Обратите внимание, что текущая версия библиотеки может привести к исключениям из памяти, даже если предложенный процесс используется.