본문 바로가기
아래아한글 자동화/python+hwp 중급

PDF드라이버를 직접 골라서 변환하는 두 줄 코드

by 일코 2022. 9. 21.

한컴에서 제공하는 기본 PDF드라이버인 "Hancom PDF"를 사용하다 보면

종종 오류가 발생할 때가 있습니다. 그게, 명확하게 어떤 오류메시지가 뜨는 게 아니라

변환중에 그냥 꺼져버린다든지,

수십개의 hwp파일을 pdf로 열심히 변환해놨는데 변환결과를 보니 막 서체가 깨져 있다든지,

나중에 확인해보니 전부 용량이 0이라든지

회사에서도 적잖이 당황했던 경험이 많습니다.

(2010 버전의 hancom pdf 드라이버로 다시 설치하라고 권하는 분들도 계시던데, 저는 해결이 안되더군요)

 

하여튼

 

예전에 유튜브에도 PDF변환 관련한 영상을 올린 적이 있었는데

(311) 수백개의 HWP파일을 PDF로 변환해야 한다면? [파이썬으로 한컴오피스 한글2018 조작하는 방법2 : PDF일괄변환] - YouTube

 

최근에 받은 어떤 질문 때문에 APi문서를 다시 훑어보다가 찾은

굉장히 간편한 방법을 공유합니다.

코드를 먼저 보여드리겠습니다.

hwp.XHwpDocuments.Item(0).XHwpPrint.filename = r"c:\users\user\desktop\sample.pdf"
hwp.XHwpDocuments.Item(0).XHwpPrint.PrinterName = 'Microsoft Print to PDF'  # 또는 'Hancom PDF' 등
hwp.XHwpDocuments.Item(0).XHwpPrint.RunToPDF()

무려 두 줄이면 PDF인쇄를 (마우스 클릭 없이) 할 수 있고

세 줄이면 프린터도 고를 수가 있더라고요.

물론 그밖의 모든 옵션도 대부분 설정 가능합니다.

 

저는 지금까지 쭉 아래처럼 써 오고 있었거든요. 확실히 코드가 복잡하고 길죠ㅜ

# 구식코드1 : CreateAction-CreateSet-GetDefault--Customize-Execute 방식
act = hwp.CreateAction("Print")
pset = act.CreateSet()
act.GetDefault(pset)
pset.SetItem(프로퍼티1, 설정값1)
pset.SetItem(프로퍼티2, 설정값2)
pset.SetItem(프로퍼티3, 설정값3)
act.Execute(pset)

또는 아래처럼요.

# 구식코드2 : 스크립트매크로 방식
hwp.HAction.GetDefault("Print", hwp.HParameterSet.HPrint.HSet)
hwp.HParameterSet.HPrint.프로퍼티1 = 설정값1
hwp.HParameterSet.HPrint.프로퍼티2 = 설정값2
hwp.HParameterSet.HPrint.프로퍼티3 = 설정값3
hwp.HAction.Execute("Print", hwp.HParameterSet.HPrint.HSet)
두 코드의 모양은 달라도 동작은 완전히 동일합니다.
구버전과의 호환성 유지를 위해 기존의 메서드 체계들을 대부분 유지하고 있어요.

기존 방식의 단점은, 필수 파라미터가 빠진다든지, 조금이라도 잘못되면 프로그램이 바로 꺼져버린다는 거죠ㅜㅜㅜ

... 본론에서 많이 샜네요;;

하여튼 XHwpPrint를 쓰는 게 가장 안정적인 것 같습니다.

 

끝.

 

 

참고로 아래는 XHwpPrint 클래스의 메서드와 프로퍼티 목록입니다.

 

#### XHwpPrint 클래스의 메서드 목록
Run(self)
RunFilePreview(self)
RunToFax(self)
RunToImage(self, Format, filename, colordepth, resolution)
RunToPDF(self)

#### XHwpPrint 클래스의 프로퍼티 목록
Application
AutoFootNote
AutoFootNoteCText
AutoFootNoteLText
AutoFootNoteRText
AutoHeadNote
AutoHeadNoteCText
AutoHeadNoteLText
AutoHeadNoteRText
BinderHoleType
Collate
Device
EvenOddPageType
Flags
LastBlankPage
NumCopy
NumRange
Pause
PrintClickHere
PrintCropMark
PrintDrawObject
PrintImage
PrintMethod
PrintToFile
PrintWallPaper
PrinterName
PrinterPaperLength
PrinterPaperSize
PrinterPaperWidth
RangeCustom
ReverseOrder
XHwpDocument
ZoomX
ZoomY
filename

마치며

하지만 XHwpPrint 클래스를 써도 해결할 수 없는 문제가 하나 있었으니...

(다음 포스팅에 계속)

댓글