2012-10-25 65 views
1

我有兩個PDF文件:Pdf APdf BPdf A已經存在於計算機的C:驅動器上,並且Pdf B通過也登錄在C:驅動器中的程序生成。pdf文檔正在被另一個進程使用

我想要做的是將兩者結合起來,以便Pdf A的頁面先顯示,然後Pdf B的頁面顯示在此之後。

這裏是我的代碼,試圖將兩個給定的PDF文件的列表合併(Pdf A是第一要素和Pdf Bfiles列表中的第二個元素,而destinationfilePdf A):

public static void MergePdfFiles(string destinationfile, List<string> files) 
{ 
    Document document = null; 

    try 
    { 
     List<PdfReader> readers = new List<PdfReader>(); 
     List<int> pages = new List<int>(); 

     foreach (string file in files) 
     { 
      readers.Add(new PdfReader(file)); 
     } 

     document = new Document(readers[0].GetPageSizeWithRotation(1)); 

     PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationfile, FileMode.Create)); 

     document.Open(); 

     foreach (PdfReader reader in readers) 
     { 
      pages.Add(reader.NumberOfPages); 
      WritePage(reader, document, writer); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
    finally 
    { 
     //being used by another process 
     document.Close(); 
    } 
} 

文檔對象試圖關閉時出現問題。它說它正在使用另一個過程。

什麼是「其他」過程使用它?

+1

爲了找出哪些進程正在使用PDFA或者使用的ProcessMonitor或UnlockMe – HatSoft

+0

具有u試圖writer.close( )之前document.close – Karthik

+0

讓我嘗試添加。一會兒。 – user1197993

回答

3

嘗試將此行更改:​​

PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationfile, FileMode.Create)); 

這一行:

PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationfile, FileMode.Create,FileAccess.Write,FileShare.ReadWrite)); 
+0

我會這樣做。我會讓你知道這是否有效。 – user1197993

+0

嗯......它現在給我一個InvalidPdfException「未找到預告片」。有任何想法嗎? – user1197993

相關問題