안녕하세요.
오늘은 파이썬을 이용해 한글 파일을 PDF 파일로 변환해보겠습니다.
파이썬을 활용해서 사무작업을 자동화 하는것은 직장인들에겐 정말 매력적인 소재일 것입니다.
저 역시 15개 가량의 한글 파일을 PDF 파일로 변환하기 위해서 소스 코드를 찾아보게 되었습니다.
긴말 필요없이 전체 코드부터 한번 살펴볼게요
1. 전체 코드
#필요한 라이브러리를 임포트합니다.
import win32com.client
import os
import re
#한글 파일을 열기 위해 HWP변수에 함수를 저장합니다.
hwp = win32com.client.gencache.EnsureDispatch('HWPFrame.HwpObject')
#HWP변수에 한글 보안 모듈을 적용합니다.
hwp.RegisterModule('FilePathCheckDLL', 'SecurityModule')
#파일의 경로를 지정해줍니다.
getPath = "불러올 파일의 경로"
savePath = "저장할 파일의 경로"
#불러올 파일의 경로에 있는 hwp확장자를 가진 파일들의 리스트를 가져옵니다.
files = [f for f in os.listdir(getPath) if re.match('.*[.]hwp', f)]
#for문을 이용해 한글 파일을 PDF 파일로 바꾸는 코드를 반복 실행해줍니다.
#file이라는 변수에 files라는 리스트에 들어있는 변수를 순서대로 대입하게 됩니다.
for file in files:
#지정한 경로에 있는 한글 파일을 열어줍니다.
hwp.Open(os.path.join(getPath, file))
#불러온 파일의 파일명과 확장자를 분리합니다.
pre, ext = os.path.splitext(file)
#아래에 작성할 설정값으로 프로그램을 실행해달라는 명령어입니다.
hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)
#파일 저장시 확장자를 pdf로 지정합니다.
hwp.HParameterSet.HFileOpenSave.filename = os.path.join(savePath, pre + ".pdf")
#파일 저장시 포맷을 pdf로 설정합니다.
hwp.HParameterSet.HFileOpenSave.Format = "PDF"
#위에 작성한 설정값으로 프로그램을 실행해달라는 명령어입니다.
hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet);
#한글 파일을 종료합니다.
hwp.Quit()
2. 코드 분석
(1) 라이브러리 설정
#필요한 라이브러리를 임포트합니다.
import win32com.client
import os
import re
한글 파일을 조작할 수 있는 win32com.client 라이브러리가 필요합니다.
이 라이브러리가 만약 없다면 명령프롬프트나 터미널에서 아래 명령어를 입력하여 설치하실 수 있습니다.
pip install pywin32
나머지 라이브러리는 기본설치되어있는 라이브러리이므로 추가 설치가 필요없습니다.
(2) 한글 파일을 불러오기 위한 모듈을 불러옵니다.
#한글 파일을 열기 위해 HWP변수에 함수를 저장합니다.
hwp = win32com.client.gencache.EnsureDispatch('HWPFrame.HwpObject')
(3) 한글 파일을 열기 위해 보안 모듈을 불러옵니다.
#HWP변수에 한글 보안 모듈을 적용합니다.
hwp.RegisterModule('FilePathCheckDLL', 'SecurityModule')
(4) 파일 경로 지정하기
#파일의 경로를 지정해줍니다.
getPath = "불러올 파일의 경로"
savePath = "저장할 파일의 경로"
단일 파일을 변환하실거라면 "C:/경로/파일명.hwp" 형태로 지정해주시면 되고
여러 파일을 변환하실거라면 "C:/경로" 형태로 지정해주시면 됩니다.
(5) 리스트 형태의 변수에 파일들 담기
#불러올 파일의 경로에 있는 hwp확장자를 가진 파일들의 리스트를 가져옵니다.
files = [f for f in os.listdir(getPath) if re.match('.*[.]hwp', f)]
files라는 리스트형 변수에 파일을 순서대로 담아줍니다.
예를들어 1.hwp와 2.hwp라는 파일이 있으면
files라는 변수에 ['1.hwp', '2.hwp'] 형태로 데이터가 저장됩니다.
(6) 반복문을 이용해 한글 파일을 변환합니다.
#for문을 이용해 한글 파일을 PDF 파일로 바꾸는 코드를 반복 실행해줍니다.
#file이라는 변수에 files라는 리스트에 들어있는 변수를 순서대로 대입하게 됩니다.
for file in files:
#지정한 경로에 있는 한글 파일을 열어줍니다.
hwp.Open(os.path.join(getPath, file))
#불러온 파일의 파일명과 확장자를 분리합니다.
pre, ext = os.path.splitext(file)
#아래에 작성할 설정값으로 프로그램을 실행해달라는 명령어입니다.
hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)
#파일 저장시 확장자를 pdf로 지정합니다.
hwp.HParameterSet.HFileOpenSave.filename = os.path.join(savePath, pre + ".pdf")
#파일 저장시 포맷을 pdf로 설정합니다.
hwp.HParameterSet.HFileOpenSave.Format = "PDF"
#위에 작성한 설정값으로 프로그램을 실행해달라는 명령어입니다.
hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet);
여러개의 파일을 변환할 것이므로 for문을 이용해 명령어를 반복시켜줍니다.
for file in files: 형태는 for문을 응용할 수 있는 다양한 방법 중 하나입니다.
아까 files라는 변수에 한글 파일들을 담았던걸 기억하시나요?
files라는 변수에 담겨있는 한글 파일들을 file이라는 변수에 순서대로 하나씩 옮겨담아준다는 의미입니다.
즉, files 변수에 들어있는 한글 파일들을 순서대로 명령어에 집어넣어주게 되는 것입니다.
for문 안에 들어있는 명령어들은 복잡한게 많으므로 어떻게 동작하는지에 대해서만 알려드리겠습니다.
file 변수에 들어있는 한글파일을 불러옵니다.
불러온 한글 파일을 파일명과 확장자로 분리해서 각각 pre라는 변수와 ext라는 변수에 담습니다.
한글 파일을 조작하겠다고 선언합니다.
불러온 한글 파일의 파일명을 'pre 변수에 들어있던 파일명.pdf' 형태로 저장합니다.
불러온 한글 파일의 포맷을 PDF로 변환합니다.
한글 파일 조작이 끝났다고 선언합니다.
(7) 한글파일 종료하기
#한글 파일을 종료합니다.
hwp.Quit()
3. 마치며
업무를 하다보니 한글파일을 정말 많이 쓰는데
페이퍼 워크의 전문가인 제 친구가
한글 파일 그대로 제출하게 되면 수신자 측에서 파일을 수정할 수 있으므로
만일을 대비해 PDF파일로 변환해서 제출해야 한다는 조언을 해줬습니다.
한글파일을 몇개만 변환한다면 그냥 직접 한글 파일을 열어서 PDF로 내보내면 되지만
파일이 10개를 넘어가니 직접 변환하기가 너무 귀찮았습니다.
업무에 시달리는 여러분에게도 많은 도움이 되길 바라며 마치겠습니다.
'코딩 > 파이썬' 카테고리의 다른 글
파이썬 map 함수를 알아보자 (0) | 2022.09.07 |
---|---|
파이썬으로 여러개의 엑셀 파일을 합병하기 (0) | 2022.07.19 |
Do it! 파이썬 생활프로젝트 후기 (0) | 2022.05.25 |
파이썬 - for 문 사용하는 방법 (0) | 2022.05.23 |
파이썬으로 아이디 기반 추첨 프로그램 만들기 (0) | 2022.05.09 |