한글 문서 내 형광펜 제어 기능

안녕하세요.
개발자는 아니고 사무 직장인이지만 코딩을 취미 삼아 하다가 현 업무에 적용 해보려 애쓰고 있는데요.
저희 업무 특성 상 100단위 페이지가 아닌 1000단위로 페이지를 구성하는 매뉴얼을 작성 합니다.
그리고 수정 사항이 생길 때 형광펜 기능으로 표시 해서 이력을 남기곤 하는데요… 음 간혹 이 형광펜 기능을 제거 해야 할
경우가 생깁니다. 이럴 경우 수동으로 작업을 해야 하니 여간 불편 하더라고요… 그래서 자동화 프로그램을 만들어보려고 아래와 같은 파이썬 코드를 작성 했습니다.

import PySimpleGUI as sg
import win32com.client

# 한글 HWP 객체 생성 함수
def create_hwp_object():
    return win32com.client.Dispatch("HWPFrame.HwpObject")

# 문서 열기 함수
def open_document(hwp, file_path):
    hwp.Open(file_path)

# 형광펜 효과가 있는 텍스트 찾기 함수
def find_highlight(hwp):
    hwp.HAction.GetDefault("DocFind", hwp.HParameterSet.HFindReplace.HSet)
    hwp.HParameterSet.HFindReplace.FindString = ""
    hwp.HParameterSet.HFindReplace.IgnoreMessage = 1
    hwp.HAction.Execute("DocFindInit", hwp.HParameterSet.HFindReplace.HSet)
    
    while hwp.HAction.Execute("DocFindNext", hwp.HParameterSet.HFindReplace.HSet):
        hwp.HAction.GetDefault("CharShape", hwp.HParameterSet.HShapeObject.HSet)
        char_shape = hwp.HParameterSet.HShapeObject
        if char_shape.MarkPenColor != 0:  # 형광펜 색상이 설정된 경우
            sg.popup("형광펜 효과를 찾았습니다.")
            return
    
    sg.popup("형광펜 효과를 찾을 수 없습니다.")

# 형광펜 효과 제거 함수
def remove_highlight(hwp):
    hwp.HAction.GetDefault("CharShape", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.MarkPenShape = 0  # 형광펜 효과 제거
    hwp.HAction.Execute("CharShape", hwp.HParameterSet.HShapeObject.HSet)
    sg.popup("형광펜 효과가 제거되었습니다.")

# GUI 레이아웃 정의
layout = [
    [sg.Text('HWP File Path'), sg.Input(), sg.FileBrowse()],
    [sg.Button('Open Document')],
    [sg.Button('Find Highlight'), sg.Button('Remove Highlight')],
    [sg.Button('Exit')]
]

# GUI 생성
window = sg.Window('HWP Highlighter', layout)

# 한글 HWP 객체 생성
hwp = create_hwp_object()

# GUI 이벤트 루프
while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED or event == 'Exit':
        break
    elif event == 'Open Document':
        open_document(hwp, values[0])
    elif event == 'Find Highlight':
        find_highlight(hwp)
    elif event == 'Remove Highlight':
        remove_highlight(hwp)

# 프로그램 종료 시 HWP 객체 닫기
hwp.Quit()
window.close()

이렇게 작성을 했는데 음… 형광펜 기능 문장을 검색하는 버튼을 누를 때 마다 인식을 하지 못했다라는 지정된 알림이 뜨곤 합니다. 혹시 잘못된 Action을 사용한 것인지. 왜 인식을 못하는 것인지 도와 주실 수 있을까요…?

2개의 좋아요

안녕하세요. 한컴디벨로퍼입니다.

현재 담당자가 내용을 확인하고 있습니다. 조금만 기다려 주세요.

2개의 좋아요

안녕하세요 ^^

charshape에 해당 “MarkPenColor” 속성이 없어 오류가 발생하는것 같습니다.

형광펜을 찾고싶으시다면 “MarkPenNext” 또는 “MarkPenPrev” 액션으로 형광펜 영역을 이동이 가능합니다.

그리고 선택된 형광펜을 지우고 싶으시면 “MarkPenDelete” 액션을 실행해주시면 됩니다.

감사합니다.^^

function OnScriptMacro_script1()
{
	HAction.Run("MarkPenNext");
	HAction.Run("MarkPenDelete");
}


4개의 좋아요

큰 도움이 되었습니다! 감사드립니다!! :grinning:

1개의 좋아요