2015-05-01 60 views
1

我正在使用標題中提到的三種工具將多個pdf文檔合併爲一個pdf。一切工作,直到我試圖刪除原來的pdf。它們被webkit「使用」。如果我關閉NW,他們當然會被釋放。我可以運行相同的代碼,但使用控制檯應用程序,這些文件可以立即刪除。有任何想法嗎?使用node webkit,iTextsharp和edge合併pdf文檔

---NW javascript--- 
var edge = require('edge'); 
var dotNetFunction = edge.func({ 
    assemblyFile: 'E:/VisualStudio2013Projects/Edge/Edge.PDF/bin/Debug/Edge.PDF.dll', 
    typeName: 'Edge.PDF.StartUp', 
    methodName: 'MergePDF' 
}); 
var payload = { 
    targetPDF: 'C:/test/042715JM75-NEW.pdf', 
    filesPDF: ['C:/test/042715JM75.pdf','C:/test/042715JM75-sales-copy.pdf'], 
}; 
---C#--- 
namespace Edge.PDF 
{ 
public class StartUp 
    { 
    public async Task<object> MergePDF(dynamic input) 
    { 
    return await Task.Run(async() => 
    { 
     string lJsonData = string.Empty; 
     string targetPDF = input.targetPDF; 
     var filesPDF = input.filesPDF; 
     using (FileStream stream = new FileStream(targetPDF, FileMode.Create)) 
      { 
       Document pdfDoc = new Document(PageSize.A4); 
       PdfCopy pdf = new PdfCopy(pdfDoc, stream); 
       pdfDoc.Open(); 

       var files = filesPDF;     
       foreach (string file in files) 
       {    
        pdf.AddDocument(new PdfReader(file)); 
       } 
       if (pdfDoc != null) 
        pdfDoc.Close(); 
      } 
      return Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true}); 
       }); 
    } 
} 
} 

回答

2

而不是創建文件數組(filesPDF)的,你應該建立PdfReader實例的數組。這些讀者加入到pdf和關閉pdf後,遍歷所有的讀者再次關閉它們:

foreach (PdfReader reader in fileReaders) {    
    reader.Close(); 
} 

現在filehandlers將被釋放,你就可以刪除這些文件。

+0

謝謝@BrunoLowagie。它效果很好。 –