안녕하세요.

 

이번 시간에는 문서내의 한자를 한글로 자동 변환하는 프로그램을 짜보도록  하겠습니다.

 

아래는 목포시에 대한 설명입니다.

 

문서의 일부에 한자가 들어가 있네요.

 

일일이  F9 키를 누르면 변환하는게 힘드셨을 겁니다.

 

그럼 코딩 내용 들어가겠습니다.

 


먼저 관련 라이브러리를 불러와 줍니다.

# -*- coding: cp949 -*-
import win32com.client as win32

import os
import fnmatch

 

한글 개체를 불러와 주고요.
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

 

폴더내의 모든 파일을 검색합니다.
dir1=os.getcwd()
dir1="E:/han/문서/"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')

print(filename)

한글파일을 열어줍니다.
for file in filename:
  hwp.Open(dir1+file, "HWP", "forceopen:true")

 

그리고 맨마지막으로 커서를 옮깁니다.

  hwp.MovePos(3, 0, 0)

 

그리고 맨 마지막 위치에서 거꾸로 검색했을 때 첫번째의 문자를 선택해줍니다.

말이 복잡한데 결론적으로는 문서내의 맨 마지막에 위치한 문자를 선택합니다.

  hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
  option = hwp.HParameterSet.HFindReplace
  option.FindString = "?"
  option.UseWildCards = 1;

  option.IgnoreMessage = 1;
  option.Direction = hwp.FindDir("Backward");
  hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);

 

맨 마지막 문자의 위치를 저장해줍니다.
  Set = hwp.GetPosBySet()
  list1 = Set.Item("List")
  para1 = Set.Item("Para")
  pos1 = Set.Item("Pos")

 

그리고 다시 문서의 처음 위치로 오고요.
  hwp.MovePos(2, 0, 0)

 

맨 처음부터 한글자 한글자 검색하여 이동합니다.
  while(1):
    hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
    option = hwp.HParameterSet.HFindReplace
    option.FindString = "?"
    option.UseWildCards = 1;

    option.IgnoreMessage = 1;
    option.Direction = hwp.FindDir("Forward");
    hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);

한자로 되어 있으면 한글로 변환합니다.


    hwp.HAction.GetDefault("ConvertToHangul", hwp.HParameterSet.HConvertToHangul.HSet);
    hwp.HAction.Execute("ConvertToHangul", hwp.HParameterSet.HConvertToHangul.HSet);

 

변환을 할 때 한자 음이 하나이면 자동으로 변환이 되나 음이 여러개이면 선택해야 합니다.

가령 傳說 할 떄 의 은 4개의 음이 있습니다.  따라서 4개의 음 중에 선택을 해야하는데요

관련해서 아래와 같은 창이 뜨고 어떤 음을 쓸지 선택을 해줘야 합니다.

 

 

현재위치를 구하고요.

    set = hwp.GetPosBySet()
    list2 = set.Item("List")
    para2 = set.Item("Para")
    pos2 = set.Item("Pos")

 

만약에 현재의 위치가 아까전에 저장해 두었던 문서의 마지막 문자의 위치와 같으면 루프문을 빠져나오고요.
    if (list1==list2 and para1==para2 and pos1==pos2):
      break

 

문서를 저장하고
  hwp.Clear(3);

 

한글을 종료합니다.
hwp.Quit()

아래는 변환할 때의 동영상입니다.

 

 

 

 

최종적으로는

 

 

한자가 한글로 잘 변환되었네요!!

 

궁금하신 사항있으시면 댓글부탁드립니다.

 

감사합니다.


# -*- coding: cp949 -*-
import win32com.client as win32
import os
import fnmatch
import time

hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

dir1=os.getcwd()
dir1="E:/han/문서/"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')
print(filename)

for file in filename:
    hwp.Open(dir1+file, "HWP", "forceopen:true")
    hwp.MovePos(3, 0, 0)

    hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
    option = hwp.HParameterSet.HFindReplace
    option.FindString = "?"
    option.UseWildCards = 1;
    option.IgnoreMessage = 1;
    option.Direction = hwp.FindDir("Backward");
    hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);

    Set = hwp.GetPosBySet()
    list1 = Set.Item("List")
    para1 = Set.Item("Para")
    pos1 = Set.Item("Pos")
    hwp.MovePos(2, 0, 0)

    while(1):
        hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);
        option = hwp.HParameterSet.HFindReplace
        option.FindString = "?"
        option.UseWildCards = 1;
        option.IgnoreMessage = 1;
        option.Direction = hwp.FindDir("Forward");
        hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet);


        hwp.HAction.GetDefault("ConvertToHangul", hwp.HParameterSet.HConvertToHangul.HSet);
        hwp.HAction.Execute("ConvertToHangul", hwp.HParameterSet.HConvertToHangul.HSet);

        set = hwp.GetPosBySet()
        list2 = set.Item("List")
        para2 = set.Item("Para")
        pos2 = set.Item("Pos")

        if (list1==list2 and para1==para2 and pos1==pos2):
            break

    hwp.Clear(3);
hwp.Quit()

안녕하세요

오늘은 여러개의 한글파일을 하나의 파일로 합쳐보는 프로그램을 작성해보도록 하겠습니다.

한글에 자체적으로 '문서 끼워 넣기'란 기능이 있습니다.

그러나 합칠 파일이 100개, 1000개가 넘어간다면 일일이 합치 여간 힘든일이 아니죠...

그럴 때 요긴하게 사용할 수 있는 프로그램이 되겠습니다.

먼저 합칠 한글파일은 아래와 같습니다.

이 것을 하나의 파일로 합쳐보겠습니다.


시작하기 앞서 관련 라이브러리를 불러와주고요

# -*- coding: cp949 -*-
import win32com.client as win32

import os
import fnmatch

 

한글 개체를 생성해주고요

hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

 

한글파일이 들어있는 폴더를 지정을 해줍니다.
dir1="E:₩₩접수₩₩"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')

print(filename)

 

그리고 모든 파일을 열면서
i=0
for file in filename:

 

첫번째 파일은 그냥 열어주고요
  if i==0:
    hwp.Open(dir1+file, "HWP", "forceopen:true")

 

그리고 문서의 맨 마지막으로 이동해줍니다. 왜냐면 뒤에 문서를 붙여줄거니까요..
    hwp.MovePos(3, 0, 0)

 

두번째 문서부터는 아래처럼 문서를 끼워넣어 줍니다.
  else:
    hwp.HAction.GetDefault("InsertFile", hwp.HParameterSet.HInsertFile.HSet);
    option=hwp.HParameterSet.HInsertFile

 

끼워넣을 문서를 지정을 해줍니다.
    option.filename = dir1+file
    option.KeepSection = 1;
    option.KeepCharshape = 1;
    option.KeepParashape = 1;
    option.KeepStyle = 1;
    hwp.HAction.Execute("InsertFile", hwp.HParameterSet.HInsertFile.HSet);

 

똑같이 현재 문서의 마지막으로 이동합니다.
    hwp.MovePos(3, 0, 0)

 

계속 반복해줍니다.

  i=i+1

파일을 바탕화면에 저장합니다.
hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet);
option=hwp.HParameterSet.HFileOpenSave
option.Attributes = 0;
option.filename = "C:/Users/BJ/Desktop/111.hwp";
option.Format = "HWP";
hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet);

 

한글을 종료하고요
hwp.Quit()

 

결과파일인 111.hwp  파일을 열면

 

하나의 파일로 잘 합쳐져 있는 것을 보실 수 있습니다!!

 


# -*- coding: cp949 -*-
import win32com.client as win32
import os
import fnmatch

hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

dir1="E:₩₩접수₩₩"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')
print(filename)

i=0
for file in filename:
    if i==0:
        hwp.Open(dir1+file, "HWP", "forceopen:true")
        hwp.MovePos(3, 0, 0)
    else:
        hwp.HAction.GetDefault("InsertFile", hwp.HParameterSet.HInsertFile.HSet);
        option=hwp.HParameterSet.HInsertFile
        option.filename = dir1+file
        option.KeepSection = 1;
        option.KeepCharshape = 1;
        option.KeepParashape = 1;
        option.KeepStyle = 1;
        hwp.HAction.Execute("InsertFile", hwp.HParameterSet.HInsertFile.HSet);
        hwp.MovePos(3, 0, 0)
    i=i+1


hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet);
option=hwp.HParameterSet.HFileOpenSave
option.Attributes = 0;
option.filename = "C:/Users/BJ/Desktop/111.hwp";
option.Format = "HWP";
hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet);

hwp.Quit()

 

안녕하세요

 

오늘은 한글파일 내에 존재하는 그림만을 추출하여 파일로 저장하는 프로그램을 만들어 보겠습니다.

 

우선 E드라이브 접수 폴더 내에 아래 한글파일이 있습니다.

 

여기에서 들어있는 증명사진?을 파일로 추출해보겠습니다.

코딩 내용입니다.

우선 관련 라이브러리를 불러와 주고요

import win32com.client as win32
import os
import fnmatch

 

한글개체를 생성합니다.
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

 

E드라이브 밑에 접수폴더내에 포함되어 있는 한글파일을 검색합니다.
dir1="E:₩₩접수₩₩"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')

print(filename)

 

모든 파일을 열면서

for file in filename:
  hwp.Open(dir1+file, "HWP", "forceopen:true")

 

문서내에 포함되어 있는 컨트롤을 검색합니다.

컨트롤이란 문서내에 있는 각종 자료? 양식? 같은 것을 말합니다.

그림도 될 수 있고 표도 될 수 있고요

 

맨 처음 obj 에 넣게되는 것은 문서 내에 첫번째 컨트롤입니다.
  obj = hwp.HeadCtrl

 

그리고 마지막 컨트롤까지 검색을 합니다.

  i = 0
  while obj!= None :

 

컨트롤이 그림인지를 판별을 해야 하는데요

CtrlID 값을 보고 판단할 수 있습니다.

저희가 원하는 것은 그림입니다.

아래 표를 보면 gso 가 그림임을 알 수 있습니다.

그래서 그림 컨트롤이면
    idnum = obj.CtrlID
    if(idnum=="gso"):

 

해당 컨트롤으로 커서를 이동하고요
      paramSet = obj.GetAnchorPos(0);
      list1 = paramSet.Item("List")
      para = paramSet.Item("Para")
      pos = paramSet.Item("Pos")
      hwp.SetPos(list1, para, pos)

 

그림 컨트롤을 선택합니다.
      hwp.HAction.Run("SelectCtrlFront")

 

그리고 그림파일 이름을 설정합니다.

이름은 한글파일명(.hwp제외) + 사진번호 + .png로 설정합니다.
      filen=file[:-4]
      name=filen+str(i+1)+".png"

 

그리고 사진추출 폴더내에 저장합니다.
      hwp.HAction.GetDefault("PictureSave",hwp.HParameterSet.HShapeObjSaveAsPicture.HSet)
      option = hwp.HParameterSet.HShapeObjSaveAsPicture
      option.Path = "E:/사진추출/"+name
      option.Ext="png"
      hwp.HAction.Execute("PictureSave",hwp.HParameterSet.HShapeObjSaveAsPicture.HSet)

 

다음 컨트롤 개체로 이동을 해서 위 작업을 반복합니다.

      i=i+1
     obj=obj.Next

 

모든 작업이 끝나면 한글을 종료합니다.
hwp.Clear(1);
hwp.Quit()

 

실행한 결과입니다.

 

그림추출 폴더 내에 사진들이 잘 저장이 되어 있는 것을 확인할 수 있습니다!!

 

감사합니다.

 


import win32com.client as win32
import os
import fnmatch

hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

dir1="E:₩₩접수₩₩"
filename=fnmatch.filter(os.listdir(dir1),'*.hwp')
print(filename)

for file in filename:
    hwp.Open(dir1+file, "HWP", "forceopen:true")
    obj = hwp.HeadCtrl
    i = 0
    while obj!= None :
            idnum = obj.CtrlID
            if(idnum=="gso"):
                paramSet = obj.GetAnchorPos(0);
                list1 = paramSet.Item("List")
                para = paramSet.Item("Para")
                pos = paramSet.Item("Pos")
                hwp.SetPos(list1, para, pos)
                hwp.HAction.Run("SelectCtrlFront")
                filen=file[:-4]
                name=filen+str(i+1)+".png"
                hwp.HAction.GetDefault("PictureSave",hwp.HParameterSet.HShapeObjSaveAsPicture.HSet)
                option = hwp.HParameterSet.HShapeObjSaveAsPicture
                option.Path = "E:/사진추출/"+name
                option.Ext="png"
                hwp.HAction.Execute("PictureSave",hwp.HParameterSet.HShapeObjSaveAsPicture.HSet)
                i=i+1
            obj=obj.Next

hwp.Clear(1);
hwp.Quit()

이번 시간에는 파이썬을 이용하여 한글파일 내에 특정 문자열를 찾아 바꾸도록 해보겠습니다.

 

 

 

위 그림에서 보듯이 111.hwp 한글문서 내용입니다.

 

별 내용은 없고 여기에서 '박지성'이라고 표시된 문자열을 '손흥민'으로 바꾸어 보겠습니다.

 

코딩내용입니다.


먼저 파이썬 파일내에 한글을 쓰기 위한 구문을 추가합니다.

 

#_*_coding:cp949_*_

 

그리고 아래 문구를 한글 액티브액스(open API)를 불러오기 위하여 써줍니다.

 

import win32com.client as win32
hwp=win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

 

그리고 111.hwp 한글파일을 열어줍니다.


hwp.Open('e:\\한글\\111.hwp',"HWP","forceopen:true")

 

그리고 모두 찾아 바꾸기를 하기 위해 명령은  "AllReplace"를 써줍니다.

 

hwp.HAction.GetDefault("AllReplace", hwp.HParameterSet.HFindReplace.HSet);

 

찾아 바꾸기에서 세부내용을 셋업해줘야 하는데요

 

"FindString" 속성에 찾을 문자열을 "ReplaceString" 속성에 새 문자열을 넣어줍니다.

 

option=hwp.HParameterSet.HFindReplace
option.FindString = "박지성"
option.ReplaceString =
"손흥민"

 

한글 파일에서  Ctrl+F 를 치면 나오는 대화상자에 아래와 같이 해주는 동작과 같습니다.

그리고 명령실행 시 "진짜 바꾸겠습니까?" 라든지 "총 12번 바꿨습니다" 라는 메시지 상자가 나오는데

 

이를 무시하기 위하여 아래 명령을 써줍니다.

 

option.IgnoreMessage = 1

 

그리고 실행해줍니다. 실행되면서 박지성이 손흥민으로 바뀝니다!!

 

hwp.HAction.Execute("AllReplace", hwp.HParameterSet.HFindReplace.HSet);

 

그리고 저장을 해주고 한글프로그램을 닫습니다. 끝~


hwp.Clear(3)
hwp.Quit()

 

수정된 한글파일을 다시 열어보면 짠~ 박지성이 손흥민으로 바뀌어져 있네요!!

 

보시고 궁금한 내용이 있으시면 댓글 부탁드립니다.

 

감사합니다.

 

 


#_*_coding:cp949_*_
import win32com.client as win32
hwp=win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
hwp.Open('e:\\한글\\111.hwp',"HWP","forceopen:true")
hwp.HAction.GetDefault("AllReplace", hwp.HParameterSet.HFindReplace.HSet);
option=hwp.HParameterSet.HFindReplace
option.FindString = "박지성"
option.ReplaceString = "손흥민"
option.IgnoreMessage = 1
hwp.HAction.Execute("AllReplace", hwp.HParameterSet.HFindReplace.HSet);
hwp.Clear(3)
hwp.Quit()

 

파이썬으로 한글파일을 조작하는 프로그램을 만들어보도록 하겠습니다.

 

먼저 이번 시간에는 한글파일을 열어서 프린트하는 간단한 프로그램입니다.

 

한글파일을 다루려면 먼저 win32com 라이브러리를 불러와야 합니다.

 

win32com은 파이썬에서 ActiveX 를 연결해주는 라이브러리인데요

 

이를 통하여 한글뿐만 아니라 엑셀도 조작이 가능합니다.(추후에 관련 글에서 설명하도록 하겠습니다.)

 

win32com 라이브러리는 pywin32라는 프로그램을 따로 설치해주셔야 이용이 가능한 라이브러리입니다.

 

구글이나 네이버에 'python win32com' 검색하시면 설치하시는 방법이 나오니 따라해주시면 됩니다.

 

관련 블로그 링크입니다. 참고하셔서 설치해 주세요.

 


다음으로 소스코드를 분석해보겠습니다.

 

import win32com.client as win32

 

win32com의 client 모듈을 win32 이름으로 불러왔습니다.

 

그럼 다음에 해야할 일은 한글 ActiveX를 읽어오는 겁니다.

 

음... 한글을 읽어오기 위해서는 한글 프로그램이 먼저 해당 PC에 깔려 있어야 합니다.

 

hwp=win32.gencache.EnsureDispatch("HWPFrame.HwpObject")

 

그러면 hwp 이름으로 한글을 조작할 수 있습니다.

 

그리고 읽어오고 싶은 한글파일 경로를 적어주시고 옵션에는 강제열기로 설정해줍니다.

 

C드라이브에 111.hwp파일이 있다고 하면


hwp.Open('c:\\111.hwp', "HWP", "forceopen:true")

 

그리고 프린트를 해야겠지요

 

hwp.HAction.GetDefault("Print", hwp.HParameterSet.HPrint.HSet)

 

이것은 프린트를 하겠다는 명령을 가져온겁니다.

 

그리고 해당 명령(프린트)를 실행해 줍니다.

 

hwp.HAction.Execute("Print", hwp.HParameterSet.HPrint.HSet)

 

프린트했으니 한글을 종료해야겠죠?


hwp.Quit()

 

이상으로 파이썬으로 한글파일을 읽어서 프린트하는 법을 알아보았습니다

다음 시간에는 한글파일 내의 특정 문구를 찾아 자동으로 바꿔주는 프로그램을 만들어 보겠습니다

보시다가 궁금하신 사항은 댓글로 남겨주세요

감사합니다


소스코드

import win32com.client as win32
hwp=win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
hwp.Open('c:\\111.hwp', "HWP", "forceopen:true")
hwp.HAction.GetDefault("Print", hwp.HParameterSet.HPrint.HSet)
hwp.HAction.Execute("Print", hwp.HParameterSet.HPrint.HSet)
hwp.Quit()

+ Recent posts