2016-11-15 31 views
0

我正試圖完成將PDF文件合併到一個PDF的簡單任務。我希望得到的PDF文件從文件名中爲每個文件添加書籤。最好我想有一個免費的解決方案。將PDF文件命令行與書籤合併

我在一個Windows系統上,想從任一命令行執行此操作,或者從MSSQL更好地執行此操作。

問題是我將使用Crystal Reports創建ERP系統訂單的PDF文件。存儲過程將創建這些PDF文件。之後,我想要選取PDF並創建一個新的合併後的PDF,合併的PDF應該將每個訂單號(來自文件名)作爲書籤。這樣,如果您正在搜索特定的號碼,您可以輕鬆地跳轉到訂單號。

而且正如我所說的最好的免費解決方案,如果沒有,我已經準備好編寫我自己的合併程序,例如C#或類似的。

+0

你有多遠?哪些位可用?你堅持哪一點? –

+0

我已經搜索合併PDF文件尋找命令行工具,沒有找到任何解決方案。我處於完成單個PDF文件的位置,並且無法真正決定是否應該嘗試使自己的程序處理合並,或者是否已經有這樣做。我猜那是我堅持的地方。 –

+0

你需要合併嗎?您不可以:a)導出單個PDF b)重複使用相同的過程導出組合的PDF? –

回答

0

我想你會需要Adobe Acrobat來做到這一點,至少。或者,如果您沒有這些,並且您不想爲此付費,則可以將所有PDF轉換爲TXT文件,併合並所有TXT文件。這聽起來有點麻煩,但實際上,這是最簡單的事情。 。 。也許 。 。 。將所有這些TXT文件轉換爲Excel文件,併合並這些文件。這應該不難。這是一個將所有TXT文件轉換爲Excel文件的腳本。

Private Declare Function SetCurrentDirectoryA Lib _ 
     "kernel32" (ByVal lpPathName As String) As Long 

Public Function ChDirNet(szPath As String) As Boolean 
'based on Rob Bovey's code 
    Dim lReturn As Long 
    lReturn = SetCurrentDirectoryA(szPath) 
    ChDirNet = CBool(lReturn <> 0) 
End Function 

Sub Get_TXT_Files() 
'For Excel 2000 and higher 
    Dim Fnum As Long 
    Dim mysheet As Worksheet 
    Dim basebook As Workbook 
    Dim TxtFileNames As Variant 
    Dim QTable As QueryTable 
    Dim SaveDriveDir As String 
    Dim ExistFolder As Boolean 

    'Save the current dir 
    SaveDriveDir = CurDir 

    'You can change the start folder if you want for 
    'GetOpenFilename,you can use a network or local folder. 
    'For example ChDirNet("C:\your_path_here\") 
    'It now use Excel's Default File Path 

    ExistFolder = ChDirNet("C:\your_path_here\\Text\") 
    If ExistFolder = False Then 
     MsgBox "Error changing folder" 
     Exit Sub 
    End If 

    TxtFileNames = Application.GetOpenFilename _ 
    (filefilter:="TXT Files (*.txt), *.txt", MultiSelect:=True) 

    If IsArray(TxtFileNames) Then 

     On Error GoTo CleanUp 

     With Application 
      .ScreenUpdating = False 
      .EnableEvents = False 
     End With 

     'Add workbook with one sheet 
     Set basebook = Workbooks.Add(xlWBATWorksheet) 

     'Loop through the array with txt files 
     For Fnum = LBound(TxtFileNames) To UBound(TxtFileNames) 

      'Add a new worksheet for the name of the txt file 
      Set mysheet = Worksheets.Add(After:=basebook. _ 
           Sheets(basebook.Sheets.Count)) 
      On Error Resume Next 
      mysheet.Name = Right(TxtFileNames(Fnum), Len(TxtFileNames(Fnum)) - _ 
            InStrRev(TxtFileNames(Fnum), "\", , 1)) 
      On Error GoTo 0 

      With ActiveSheet.QueryTables.Add(Connection:= _ 
         "TEXT;" & TxtFileNames(Fnum), Destination:=Range("A1")) 
       .TextFilePlatform = xlWindows 
       .TextFileStartRow = 1 

       'This example use xlDelimited 
       'See a example for xlFixedWidth below the macro 
       .TextFileParseType = xlDelimited 

       'Set your Delimiter to true 
       .TextFileTabDelimiter = True 
       .TextFileSemicolonDelimiter = False 
       .TextFileCommaDelimiter = False 
       .TextFileSpaceDelimiter = False 

       'Set the format for each column if you want (Default = General) 
       'For example Array(1, 9, 1) to skip the second column 
       .TextFileColumnDataTypes = Array(1, 9, 1) 

       'xlGeneralFormat General   1 
       'xlTextFormat  Text    2 
       'xlMDYFormat  Month-Day-Year 3 
       'xlDMYFormat  Day-Month-Year 4 
       'xlYMDFormat  Year-Month-Day 5 
       'xlMYDFormat  Month-Year-Day 6 
       'xlDYMFormat  Day-Year-Month 7 
       'xlYDMFormat  Year-Day-Month 8 
       'xlSkipColumn  Skip    9 

       ' Get the data from the txt file 
       .Refresh BackgroundQuery:=False 
      End With 
     ActiveSheet.QueryTables(1).Delete 
     Next Fnum 

     'Delete the first sheet of basebook 
     On Error Resume Next 
     Application.DisplayAlerts = False 
     basebook.Worksheets(1).Delete 
     Application.DisplayAlerts = True 
     On Error GoTo 0 

CleanUp: 

     ChDirNet SaveDriveDir 

     With Application 
      .ScreenUpdating = True 
      .EnableEvents = True 
     End With 
    End If 
End Sub