안녕하세요

 

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

 

우선 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()

+ Recent posts