2016-08-25 123 views
0

我想合併和壓縮使用bitmiracle.docotic.pdf庫(試用版)的PDF文件和合並文件的大小700MB我面臨「內存異常」,下面是我的代碼合併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. 追加不超過10(或其他數字)的文件
  3. 保存文件(中間保存)
  4. 打開剛剛保存的文件
  5. 追加下一批文件
  6. ...

請注意,即使使用建議的過程,庫的當前版本也可能導致內存不足異常。