Слияние 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;
Итак, я предлагаю вам попробовать следующий процесс:
- Открыть документ
- Приложите не более 10 (или другого номера) документов
- Сохранить документ (промежуточное сохранение)
- Откройте документ, который вы только что сохранили
- Добавить следующую партию документов
- ...
Обратите внимание, что текущая версия библиотеки может привести к исключениям нехватки памяти даже при использовании предложенного процесса.