2017-08-16 68 views
2

真的不知道該怎麼做?我可以將一個tif轉換爲一個pdf。我可以將一個目錄中的所有tif轉換爲一個pdf。我想要做的是根據他們的上次寫入訪問或創建日期或修改日期來轉換一組tif。例如,如果我在一個目錄中有7個tif,其中3個具有相同的時間戳,而4個具有另一個相同的時間戳,我想將3合併成一個pdf,然後將其他4合併到另一個pdf中。我有點困擾如何解決這個問題。我是否需要創建所有文件的列表,然後對它們進行分組,或者我可以合併3,然後去下一個組合並使用這些等等,等等。使用基於lastwriteaccess的itextsharp將muiltple tiff合併爲一個pdf

下面的代碼是我使用收集前5個文件是什麼:

Dim dir As New DirectoryInfo(tiffPath) 
Dim files As List(Of FileInfo) = 
dir.GetFiles("*.tif").OrderByDescending(Function(fc) 
fc.LastAccessTime).Take(5).ToList 

For Each lfi As FileInfo In files 
MsgBox(lfi.Name) 
Next 
+0

我已經刪除了iText標籤,因爲在您編寫自己的過程中,您已經涵蓋了您的問題的iText部分。爲了幫助您,我添加了一些看起來更相關的標籤。 –

+0

您認爲每個文件組的時間戳是完全匹配的嗎?他們能在一分鐘之內,一小時之內,一秒鐘之內......? –

+0

日期和時間戳是完全一樣的第二,不知道它是如何做的,但另一個程序提供了我們的tiff –

回答

0

它看起來像,如果它們的時間戳小於一些時間跨度不同,這將是足夠的一堆文件一起。

所以,如果你爲了通過他們的.LastWriteTimeUtc的文件,然後你可以遍歷該列表,並檢查它多久是一個與前一個之間。如果差距很小,則將其添加到當前列表中,否則開始一個新列表。

我測試了使用文件的隨機選擇一個目錄下面的代碼,所以30天是爲一個適當的時間跨度,它看起來像也許兩三秒鐘將有利於您的使用:

Option Infer On 
Option Strict On 

Imports System.IO 

Module Module1 

    ''' <summary> 
    ''' Get FileInfos bunched by virtue of having less than some time interval between their consecutive LastWriteTimeUtc when ordered by that. 
    ''' </summary> 
    ''' <param name="srcDir">Directory to get files from.</param> 
    ''' <param name="adjacencyLimit">The allowable timespan to count as in the same bunch.</param> 
    ''' <returns>A List(Of List(Of FileInfo). Each outer list has consecutive LastWriteTimeUtc differences less than some time interval.</returns> 
    Function GetTimeAdjacentFiles(srcDir As String, adjacencyLimit As TimeSpan) As List(Of List(Of FileInfo)) 
     Dim di = New DirectoryInfo(srcDir) 
     Dim fis = di.GetFiles().OrderBy(Function(fi) fi.LastWriteTimeUtc) 

     If fis.Count = 0 Then 
      Return Nothing 
     End If 

     Dim bins As New List(Of List(Of FileInfo)) 
     Dim thisBin As New List(Of FileInfo) From {(fis(0))} 

     For i = 1 To fis.Count - 1 
      If fis(i).LastWriteTimeUtc - fis(i - 1).LastWriteTimeUtc < adjacencyLimit Then 
       thisBin.Add(fis(i)) 
      Else 
       bins.Add(thisBin) 
       thisBin = New List(Of FileInfo) From {fis(i)} 
      End If 
     Next 

     bins.Add(thisBin) 

     Return bins 

    End Function 

    Sub Main() 
     Dim src = "E:\temp" 
     'TODO: choose a suitable TimeSpan, e.g. TimeSpan.FromSeconds(3) 
     Dim adjacencyLimit = TimeSpan.FromDays(30) 
     Dim x = GetTimeAdjacentFiles(src, adjacencyLimit) 

     For Each b In x 
      Console.WriteLine("***********") 
      For Each fi In b 
       'TODO: merge each fi into a PDF. 
       Console.WriteLine(fi.Name) 
      Next 
     Next 

     Console.ReadLine() 

    End Sub 

End Module 

我建議兩到三秒,因爲如果文件已經存儲在FAT類型(例如FAT32或exFAT,可用於USB記憶棒,舊磁盤驅動器等)文件系統上,那麼時間戳的分辨率將會有已經兩秒鐘了。

+0

這工作爲我感謝你安德魯。我標記的答案被接受,但我沒有足夠的聲望點 –

+0

@ElNottoWorry不客氣:)我認爲你*可能*需要等待一段時間(也許24或48小時),然後才能接受答案 - 直到你得到足夠的代表。 –

相關問題