Слияние PDF и Сжатие файлов.net

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

 /// <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 используется разными методами

Пожалуйста, дайте мне знать, если что-то нужно изменить

Спасибо, Киранкумар

1 ответ

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

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

outputDocument.SaveOptions.UseObjectStreams = false;

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

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

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

Другие вопросы по тегам