2016-07-21 28 views
0

我正在彙集一些代碼,將基於文件名前綴合並pdf的過程。我目前有下面的代碼抓取文件名,不合並,但覆蓋。我相信我的問題是FileStream的位置,但如果我將它移出當前位置,我無法獲取文件名。有什麼建議麼?謝謝。iText FileStream overwirtes

static void CreateMergedPDFs() 
    { 
     string srcDir = "C:/PDFin/"; 
     string resultPDF = "C:/PDFout/"; 
     { 
      var files = System.IO.Directory.GetFiles(srcDir); 
      string prevFileName = null; 

      int i = 1; 
      foreach (string file in files) 
      { 
       string filename = Left(Path.GetFileName(file), 8); 
       using (FileStream stream = new FileStream(resultPDF + filename + ".pdf", FileMode.Create)) 
       { 

        if (prevFileName == null || filename == prevFileName) 
        { 
         Document pdfDoc = new Document(PageSize.A4); 
         PdfCopy pdf = new PdfCopy(pdfDoc, stream); 
         pdfDoc.Open(); 
         { 
          pdf.AddDocument(new PdfReader(file)); 
          i++; 
         } 
         if (pdfDoc != null) 
          pdfDoc.Close(); 
         Console.WriteLine("Merges done!"); 
        } 

       } 
      } 
     } 
    } 
} 

}

回答

1

您所描述的行爲是你的代碼是一致的。您正在以不正確的方式創建循環。

試試這個:

static void CreateMergedPDFs() 
    { 
     string srcDir = "C:/PDFin/"; 
     string resultPDF = "C:/PDFout/merged.pdf"; 
     FileStream stream = new FileStream(resultPDF, FileMode.Create); 
     Document pdfDoc = new Document(PageSize.A4); 
     PdfCopy pdf = new PdfCopy(pdfDoc, stream); 
     pdfDoc.Open(); 
     var files = System.IO.Directory.GetFiles(srcDir); 
     foreach (string file in files) 
     { 
      pdf.AddDocument(new PdfReader(file)); 
     } 
     pdfDoc.Close(); 
     Console.WriteLine("Merges done!"); 
    } 
} 

這更有意義,不是嗎?

如果你想組文件根據它們的前綴,你應該閱讀問題的答案Group files in a directory based on their prefix

在回答這個問題,假設前綴和文件名的其餘部分被分離一個-字符。例如,1-abc.pdf1-xyz.pdf具有前綴1,而2-abc.pdf2-xyz.pdf具有前綴2。就你而言,目前還不清楚你如何確定前綴,但很容易獲得所有文件的列表,根據你想要確定前綴的算法對它們進行排序並建立一組文件。

+0

謝謝你的回覆。我已經能夠將所有文件合併到一個文件中,我的問題是基於文件前綴創建多個文件。所以如果我有123.pdf,122.pdf和222.pdf,並且我想在輸出文件夾中包含2個pdf文件。在進入for循環之前,我需要文件名(前綴),以便我可以合併。那有意義嗎? – okmred

+0

您的*特定*請求沒有意義,因爲不清楚名爲123.pdf,122.pdf和222.pdf的文件的前綴是什麼。基於前綴過濾文件的* general *請求以及基於該前綴合並文件是有意義的,但這是一個不應該被標記爲iText問題的問題,因爲在任何情況下實現這一點都是不容易的編程語言。我可以解釋如何在Java中執行此操作;如果你想問如何在C#中做這件事,你應該創建一個C#問題(但要注意這樣的問題可能會得到反對票)。 –

+0

我已經更新了答案。 –