안녕하세요.
프로젝트 진행 중 많은 수의 한글 파일을 PDF로 변환하는 작업을 해야하는 경우가 발생했습니다.
일일이 한글 파일을 열어 PDF로 변환하기에는 시간이 많이 소요된다고 판단하여 안쓰던 파이썬을 써보려고합니다.
구글링하여 제 상황에 맞는 사용하기 좋은 파이썬 코드를 발견하여 사용했습니다.
저는 폴더에 한글 파일을 전부 넣고 작업했기때문에, 파일의 경로와 출력되는 파일의 경로를 모두 현재 경로로 지정하였음을 참고해주시기 바랍니다.
파일의 지정이 필요하신 분은 아래 코드의 realPath를 파일의 경로(getPath)와 출력되는 파일의 경로(savePath)로 적절히 변경하여 사용하시면 됩니다.
전체 코드
#필요한 라이브러리 임포트
import win32com.client
import os
import re
#한글 파일을 열기 위해 HWP변수에 함수를 저장
hwp = win32com.client.gencache.EnsureDispatch('HWPFrame.HwpObject')
#HWP변수에 한글 보안 모듈을 적용
hwp.RegisterModule('FilePathCheckDLL', 'SecurityModule')
#파일의 경로를 지정
getPath = "C:\\Users\\mush\\Desktop\\hwptopdf"
savePath = "C:\\Users\\mush\\Desktop\\hwptopdf\\result"
#현재 경로를 지정
os.getcwd()
realPath = os.getcwd()
#불러올 파일의 경로에 있는 hwp확장자를 가진 파일들의 리스트를 가져오기
files = [f for f in os.listdir(realPath) if re.match('.*[.]hwp', f)]
#for문을 이용해 한글 파일을 PDF 파일로 바꾸는 코드를 반복 실행
#위 files 리스트에 들어있는 변수를 순서대로 file이라는 변수에 대입
for file in files:
#지정한 경로 또는 현재 경로에 있는 한글 파일을 오픈
#아래 코드는 현재 경로 지정
#파일 경로를 지정할 경우 realPath → getPath 변경
hwp.Open(os.path.join(realPath, file))
#불러온 파일의 파일명과 확장자를 분리
pre, ext = os.path.splitext(file)
#아래에 작성할 설정값으로 프로그램을 실행
hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)
#파일 저장시 확장자를 pdf로 지정
#아래 코드는 현재 경로에 .pdf 파일을 생성하도록 지정
#파일 경로를 지정할 경우 realPath → savePath 변경
hwp.HParameterSet.HFileOpenSave.filename = os.path.join(realPath, pre + ".pdf")
#파일 저장시 포맷을 pdf로 설정
hwp.HParameterSet.HFileOpenSave.Format = "PDF"
#위에 작성한 설정값으로 프로그램을 실행
hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet);
#한글 파일을 종료합니다.
hwp.Quit()
주의
한글 파일 내 인쇄 방식은 변경이 되지않습니다.
수동으로 변경하여 작업하시거나, 한글 파일 내 HwpPrnMng 를 사용하여 작업하면 '기본 인쇄'가 디폴트로 적용되니 해당 프로세스를 사용하여 작업하시면 됩니다.
추후 필요 시 HwpPrnMng 를 사용하여 파이썬 코드를 작성해보도록 하겠습니다.
Reference
'ETC' 카테고리의 다른 글
[WSL2] Windows Subsystem for Linux 2(WSL 2) 설치 방법 (2) | 2024.11.13 |
---|---|
[Python] pdf to enc 변환 코드 (0) | 2023.12.12 |
[PowerShell] 파워쉘 사용법 공부하기 (0) | 2023.10.17 |
[OpenStack] DevStack을 이용한 오픈스택 설치(2) (0) | 2022.02.07 |
[OpenStack] DevStack을 이용한 오픈스택 설치(1) (0) | 2022.02.07 |