엑셀 VBA로 PDF파일 페이지 나누기

by 지천명영어 posted Dec 13, 2022
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

PDF파일을 OCR로 인식 시키려면 네이버 OCR은 1장씩만 지원됩니다. 그래서 PDF파일 자르기 프로그램을 찾았으나, 역시, 전부 복잡합니다.

 

그래서 답답해서 만든 pdf 파일자르기를 엑셀로 만들었습니다. 제가 만든건 아니고, 역시나 엑셀 고수분들께서 미리 만들어 놓은 코드를 조합했습니다.

 

1. PDF페이지를 엑셀에서 읽어오기

2. 1페이지 단위로 PDF파일을 쪼개기(PDFtk이용)

 

PDFtk를 사용하기 위해서는 shell명령을 사용해야 합니다. 하지만, 아크로벳리더가 설치 안되어 있으면 shell 명령 안됩니다.

이때는 디버그 프린트 텍스트를 cmd에 붙여 넣으면 됩니다.

아니면, 아크로벳리더를 설치하고 다시 실행하면 PDF파일 쪼개기 잘 됩니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
'답답해서 만든 pdf 파일자르기 -
' 아크로벳리더가 설치 안되어 있으면 shell 명령 안됨.
' 디버그 프린트 텍스트를 cmd에 붙여 넣으면 됩니다.
 
Sub Extracting_Pdf_Using_PdfTk_Server()
 
Dim i_folder As String:     i_folder = "C:\temp\"                '이곳에 폴더이름을 넣으세요/
Dim i_pdf_file:             i_pdf_file = "KCI_FI002869020.pdf"   '이곳은 파일이름을 넣으세요
Dim i_object As Object:     Set i_object = CreateObject("WScript.Shell")
Dim I, j As Long
Dim i_str As String
   
Dim i_all_page As Integer
    
Dim xFileNum As Long
Dim xStr As String
Dim RegExp As Object
    Set RegExp = CreateObject("VBscript.RegExp")
    RegExp.Global = True
    RegExp.Pattern = "/Type\s*/Page[^s]"
    xFileNum = FreeFile
    Open (i_folder & i_pdf_file) For Binary As #xFileNum
        xStr = Space(LOF(xFileNum))
        Get xFileNum, , xStr
    Close xFileNum
    
    i_all_page = RegExp.Execute(xStr).Count
    
    For I = 1 To i_all_page
        i_str = "cmd /c PDFtk " & i_folder & i_pdf_file & " cat " & I & " output " & i_folder & Left(i_pdf_file, Len(i_pdf_file) - 3) & "_" & Format(I, "000") & ".pdf"
        Debug.Print i_str
        i_object.Run i_str, 0, True
    Next
  
End Sub
cs