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

[QnA] 파이썬으로 PDF인쇄시 한/글 버전, PDF드라이버 선택가능?

by 일코 2021. 7. 14.

 양동훈님의 댓글

우선 제가 대답드리기 조심스러운 부분이 있기는 합니다. 제가 안된다고 했다고 절대로 안 되는 게 아니라, 되는 방법을 제가 못 찾은 것일 수도 있다는 생각 때문입니다. 그래도 제 관점에서 되고 안 되고는 말씀드릴테니, 참고만 해 주시기 바랍니다.

1. 한/글 버전을 선택해서 열 수 있나?

어렵습니다.
다만 최신버전의 한/글이 열리는 게 아니라, (버전이 낮더라도) 최근에 설치한 한/글이 열린다는 점 유의해주세요.

2. AdobePDF, EZ_PDF 등 다른 PDF드라이버 지정 가능한지?

가능합니다. 다만 파이썬 단에서 설정을 바꾸는 건 굉장히 번거로운 일이기 때문에 아래 방법을 추천드립니다.
가장 간편한 방법은, 환경설정의 <기타>탭 하단에 PDF드라이버 선택 메뉴를 활용하는 방법입니다.

PDF 저장시, 기본 출력되는 PDF드라이버를 선택할 수 있습니다.

그밖에도 한/글 액션 중 "Print" 를 사용해서 드라이버를 선택할 수 있는데,
예를 들면 이런 식입니다. 근데 명령을 실행했을 때 팝업이 뜨기 때문에 번거롭습니다ㅜ

def hwp_print(driver="Hancom PDF"):
    act = hwp.CreateAction("Print") 
    pset = act.CreateSet() 
    act.GetDefault(pset) # 프린트 파리미터 초기화 
    pset.SetItem("Range", 4) # 인쇄범위, 4 == hwp.PrintRange("Custom") 
    pset.SetItem("RangeCustom", "1") # 사용자가 직접 입력한 인쇄 범위 
    pset.SetItem("UsingPagenum", 1) # 한 쪽, 현재쪽 선택인쇄할 때 사용하는 라인 
    pset.SetItem("NumCopy", 1) # 인쇄매수 
    pset.SetItem("PrintMethod", 0) # 인쇄 방법(모아찍기 아닌 보통인쇄)
    pset.SetItem("PrinterName", driver) # 프린터 선택(파라미터에서 지정) 
    pset.SetItem("PrintToFile", 0) # 인쇄 결과를 파일로 저장 
    pset.SetItem("ReverseOrder", 0) # 역순 인쇄 
    pset.SetItem("Pause", 0) # 끊어 찍기 매수 
    pset.SetItem("PrintImage", 1) # 그림 개체 
    pset.SetItem("PrintDrawObj", 1) # 그리기 개체 
    pset.SetItem("PrintClickHere", 0) # 누름틀 
    pset.SetItem("Device", 0) # 프린터 장치(PDF, PNG 포함)
    pset.SetItem("PrintFormObj", 1) # 양식 개체 출력여부 
    pset.SetItem("PrintMarkPen", 0) # 형광펜 출력여부 
    pset.SetItem("PrintMemo", 0) # 메모 출력여부 
    pset.SetItem("PrintMemoContents", 0) # 메모 내용 출력여부 
    pset.SetItem("PrintRevision", 1) # 교정부호 출력여부 
    item_set = pset.CreateItemSet("PrintWatermark", "PrintWatermark") # 워터마크 서브 프로퍼티 설정 
    item_set.SetItem("WatermarkType", 0) 
    act.Execute(pset)

하여튼 PDF드라이버 선택은 위의 환경설정에서 변경하시면 될 것 같습니다.

 

※ [2022. 9. 21.] 훨씬 간편하고 좋은 방법이 있었습니다. 아래 포스팅에서 다루겠습니다.

(삽입예정)

3. 하위폴더의 hwp파일을 전부 선택하는 방법?

이것도 간단합니다. 바로 os모듈의 walk 메서드를 사용하는 건데요.
아래 예제코드를 참고하시기 바랍니다.

def 하위폴더의_hwp까지_검색(경로명): 
    hwp_list = [] 
    for dirpath, dirnames, filenames in os.walk(경로명): 
        for filename in filenames: 
            if filename.endswith(".hwp"): 
                hwp_list.append(os.path.join(dirpath, filename)) 
            else: 
                pass 
    return hwp_list 
    
한글파일목록 = 하위폴더의_hwp까지_검색(r"C:\Program Files (x86)\HNC\Office 2020\HOffice110\Shared\HwpTemplate\Style\en-US") 
print(한글파일목록)

위 명령 실행시 제 PC에서 한글파일목록 리스트는 아래와 같이 저장됩니다.

['C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Book\\Book1.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Book\\Book2.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Book\\Book3.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Book\\Book4.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Book\\Book5.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Letter\\Letter1.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Letter\\Letter2.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Letter\\Letter3.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Letter\\Letter4.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Letter\\Letter5.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Paper\\Paper1.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Paper\\Paper2.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Paper\\paper3.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Present\\Present1.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Present\\Present2.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Present\\Present3.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Present\\Present4.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Present\\Present5.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Report\\Report1.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Report\\Report2.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Report\\Report3.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Report\\Report4.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Thesis\\Thesis2.hwp', 
 'C:\\Program Files (x86)\\HNC\\Office 2020\\HOffice110\\Shared\\HwpTemplate\\Style\\en-US\\Thesis\\Thesis3.hwp']

그러면 한/글 파일을 여는 코드를 이런 식으로 변경해주시면 되겠죠?

for 한글파일 in 한글파일목록: 
    hwp.Open(한글파일) # 이런저런 작업 또는 PDF저장하는 코드 등 
    hwp.Clear(option=1) # 수정내용을 버리는 경우 # 
    hwp.Save() # 수정내용을 저장하고 싶은 경우에는 Clear 대신 Save 실행 
    hwp.Run("FileClose") # 문서 닫기

 

행복한 하루 되세요^^

댓글