5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
해결

워드 파일 이미지 파일로 변환 방법- 빠른 실행도구

가을남자
10월 19일 조회 954

워드 파일을 이미지 파일로 바로 변환 가능한 방법이 있을까요?
현재 (m365 기준) 다른 파일 형식 저장에서는 이미지 파일 형식으로 저장하는 방법이 없어서 문의합니다.
나름 pdf로 저장후 다시 이미지 파일로 변환 가능한 다른 프로그램을 사용하고 있는데 여러 가지로 불편해서
혹시나 하고 다른 방법이 있는지 문의합니다.

AI 툴로 프롬프트 넣어서 vba 구문을 작성 지시했는데 무료 버전 탓인지 제시된 vba 구문이 계속 오류납니다.
(ChatGPT, Google Gemini, Claude 모두 오류 다수 발생)

경험자 분의 조언이나,
vba 구문 공유 부탁합니다.

댓글 6

츠츠°º⁰ 10월 19일

온라인에 올려도되는 자료면, 아래에서 해보셔도 좋을듯합니다.^^
https://convertio.co/kr/doc-jpg/
https://www.freeconvert.com/ko/doc-to-jpg
https://www.freeconvert.com/ko/word-to-jpg

가을남자 작성자 10월 20일

@츠츠°º⁰ 님 감사합니다.

수메리안 10월 19일

안녕하세요~

MS 워드 문서를 이미지(JPG/PNG)로 변환할 때는
PowerPoint를 중간에 활용하는 방식이 가장 안정적입니다.

왜냐하면,

Word는 “페이지를 바로 이미지로 저장”하는 기능이 없고,
PDF 경유 방식은 해상도 제어가 어렵고 여백이 깨질 수 있습니다.

반면에,
PowerPoint는 슬라이드 자체를 고정 해상도로 곧바로 JPG/PNG 내보낼 수 있어 품질 유지가 가능합니다.

그래서 Word의 각 페이지를 PowerPoint 슬라이드로 옮긴 후
슬라이드를 JPG로 Export하는 VBA 코딩이 가장 많이 쓰입니다.

아래 코딩을 참고하시고, 첨부파일을 테스트해 보세요~

이곳은 엑셀파일만 업로드가 가능하므로 docm을 zip을 압축해서 올렸으니 압축을 풀고 사용하시고,
이 사이트의 정책에 위반이라면 삭제하도록 하겠습니다.




Option Explicit

'== 상수 정의 ==
Private Const A4_WIDTH_PT As Double = 595.2755906
Private Const A4_HEIGHT_PT As Double = 841.8897638
Private Const PP_LAYOUT_BLANK As Long = 12
Private Const PP_PASTE_EMF As Long = 2
Private Const DEFAULT_DPI As Long = 200
Private Const SAFETY_PADDING As Double = 1#

Public Sub WordToJPG()
    On Error GoTo EH
    
    Dim Doc As Document
    Dim pTot As Long, i As Long
    Dim fNm As String, fDir As String
    Dim dpi As Long, dpiR As Double
    
    Dim ppApp As Object, ppPrs As Object
    Dim ppSld As Object
    Dim tSt As Double, tEl As Double
    Dim Rng As Range
    Dim sCnt As Long
    
    Application.ScreenUpdating = False
    tSt = Timer
    
    '// 1. 문서 초기화 ==
    Set Doc = ActiveDocument
    Options.Pagination = True
    Doc.Repaginate
    pTot = Doc.ComputeStatistics(wdStatisticPages)
    If pTot = 0 Then
        MsgBox "페이지가 감지되지 않습니다.", vbExclamation
        GoTo CleanExit
    End If
    
    '// 2. 사용자 입력 : 저장폴더, 이미지이름, 해상도 ==
    If Not GetUserInputs(Doc, fDir, fNm, dpi) Then GoTo CleanExit
    dpiR = dpi / 72#
    
    '// 3. PowerPoint 초기화 ==
    Set ppApp = CreateObject("PowerPoint.Application")
    ppApp.Visible = True
    ppApp.WindowState = 2                 ' 최소화
    Set ppPrs = ppApp.Presentations.Add
    
    '// 3-1. 슬라이드 하나만 생성 (재사용)
    Set ppSld = ppPrs.Slides.Add(1, PP_LAYOUT_BLANK)
    
    '// 4. 페이지 루프
    For i = 1 To pTot
        On Error Resume Next
        
        Application.StatusBar = "이미지 변환 중... " & i & "/" & pTot & _
                                " (" & Format$(i / pTot, "0%") & ")"
        
        Set Rng = GetPageRange(Doc, i, pTot)
        ClearSlide ppSld
        
        If ProcessPage(Rng, ppPrs, ppSld, dpiR, fDir, fNm, i) Then
            sCnt = sCnt + 1
        End If
        
        On Error GoTo EH
    Next i
    
    '// 5. 완료 메시지
    tEl = Timer - tSt
    MsgBox "완료!" & vbCrLf & vbCrLf & _
           "성공: " & sCnt & " / " & pTot & " 페이지" & vbCrLf & _
           "위치: " & fDir & vbCrLf & _
           "소요시간: " & Format$(tEl, "0.0") & "초", vbInformation

CleanExit:
    Application.StatusBar = False
    On Error Resume Next
    If Not ppPrs Is Nothing Then ppPrs.Close
    If Not ppApp Is Nothing Then ppApp.Quit
    Application.ScreenUpdating = True
    Exit Sub

EH:
    MsgBox "오류: " & Err.Number & vbCrLf & Err.Description, vbCritical, "Export JPG"
    Resume CleanExit
End Sub

'// 2-1 페이지 범위 가져오기 ==
Private Function GetPageRange(ByVal Doc As Document, ByVal pNo As Long, ByVal pTot As Long) As Range
    Dim rSt As Long, rEd As Long
    rSt = Doc.GoTo(wdGoToPage, wdGoToAbsolute, pNo).Start
    If pNo < pTot Then
        rEd = Doc.GoTo(wdGoToPage, wdGoToAbsolute, pNo + 1).Start - 1
    Else
        rEd = Doc.Content.End
    End If
    Set GetPageRange = Doc.Range(rSt, rEd)
End Function

'// 4-1 슬라이드 초기화 ==
Private Sub ClearSlide(ByVal Sld As Object)
    Dim Shp As Object
    For Each Shp In Sld.Shapes
        Shp.Delete
    Next
End Sub

'// 4-3 페이지 처리 ==
Private Function ProcessPage(ByVal Rng As Range, ByVal ppPrs As Object, ByVal ppSld As Object, _
                             ByVal dpiR As Double, ByVal fDir As String, _
                             ByVal fNm As String, ByVal pNo As Long) As Boolean
    On Error GoTo EH
    
    Dim pW As Single, pH As Single
    Dim Shp As Object
    Dim isPrt As Boolean
    Dim pxW As Long, pxH As Long
    Dim sFile As String
    
    '// 방향 판단 및 A4 크기 설정
    isPrt = (Rng.Sections(1).PageSetup.PageHeight >= Rng.Sections(1).PageSetup.PageWidth)
    If isPrt Then
        pW = A4_WIDTH_PT: pH = A4_HEIGHT_PT
    Else
        pW = A4_HEIGHT_PT: pH = A4_WIDTH_PT
    End If
    
    '// 슬라이드 크기 설정
    With ppPrs.PageSetup
        .SlideWidth = pW
        .SlideHeight = pH
    End With
    
    '// 페이지 복사 및 붙여넣기
    Rng.Copy
    Set Shp = ppSld.Shapes.PasteSpecial(DataType:=PP_PASTE_EMF)(1)
    
    '// 여백 반영 및 위치 조정
    PositionShapeWithMargins Shp, Rng, pW, pH
    
    '// JPG 저장
    pxW = CLng(pW * dpiR)
    pxH = CLng(pH * dpiR)
    sFile = fDir & fNm & "_" & Format$(pNo, "000") & ".jpg"
    ppSld.Export sFile, "JPG", pxW, pxH
    
    ProcessPage = True
    Exit Function
EH:
    ProcessPage = False
End Function

'// 4-4 여백 반영 위치 조정
Private Sub PositionShapeWithMargins(ByVal Shp As Object, ByVal Rng As Range, _
                                     ByVal pW As Single, ByVal pH As Single)
    Dim mL As Double, mR As Double, mT As Double, mB As Double
    Dim bW As Double, bH As Double
    Dim k As Double
    
    With Rng.Sections(1).PageSetup
        mL = .LeftMargin
        mR = .RightMargin
        mT = .TopMargin
        mB = .BottomMargin
    End With
    
    '// 콘텐츠 박스 크기 계산
    bW = pW - mL - mR - 2 * SAFETY_PADDING: If bW < 0 Then bW = 0
    bH = pH - mT - mB - 2 * SAFETY_PADDING: If bH < 0 Then bH = 0
    
    '// 비율 유지 축소
    If (bW / Shp.Width) < (bH / Shp.Height) Then
        k = bW / Shp.Width
    Else
        k = bH / Shp.Height
    End If
    
    Shp.LockAspectRatio = -1
    Shp.Width = Shp.Width * k
    Shp.Height = Shp.Height * k
    
    '// 여백 + 중앙 정렬
    Shp.Left = mL + SAFETY_PADDING + (bW - Shp.Width) / 2
    Shp.Top = mT + SAFETY_PADDING + (bH - Shp.Height) / 2
End Sub

'// 2-2. 사용자 입력 받기 ==
Private Function GetUserInputs(ByVal Doc As Document, ByRef fDir As String, _
                               ByRef fNm As String, ByRef dpi As Long) As Boolean
    '// 폴더 선택
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "JPG를 저장할 폴더를 선택하세요"
        If .Show <> -1 Then Exit Function
        fDir = .SelectedItems(1)
    End With
    If Right$(fDir, 1) <> "\" Then fDir = fDir & "\"
    
    '// 파일 기본이름
    fNm = InputBox("파일 기본 이름을 입력하세요" & vbCrLf & _
                   "(예: " & RemoveExt(Doc.Name) & ")", _
                   "기본 이름", RemoveExt(Doc.Name))
    If Len(Trim$(fNm)) = 0 Then Exit Function
    
    '// DPI 설정
    dpi = CLng(Val(InputBox("저장 해상도(DPI)를 입력하세요." & vbCrLf & _
                            "일반: 150, 선명: 200~300 (기본 " & DEFAULT_DPI & ")", _
                            "해상도(DPI)", CStr(DEFAULT_DPI))))
    If dpi <= 0 Then dpi = DEFAULT_DPI
    
    GetUserInputs = True
End Function

'// 확장자 제거
Private Function RemoveExt(ByVal nm As String) As String
    Dim p As Long
    p = InStrRev(nm, ".")
    If p > 0 Then RemoveExt = Left$(nm, p - 1) Else RemoveExt = nm
End Function




가을남자 작성자 10월 20일

답변 감사합니다.
AI한테 물었더니 말씀하신대로 PPT로 변환후 다시 이미지 파일로 변환하는 과정을 코드로 작성하더군요.
혹시나 다른 방법이 있지 않을까 해서....
현재 제가 사용하는 방법은 파일을 pdf로 변환한 다음 ez*** 프로그램을 사용해서 다시 이미지 파일로 바꾸는 방법을 사용하고 있습니다.
MS에서 왜 WORD에 이미지 파일로 저장하는 내용을 넣지 않은지 궁금하네요..  

수메리안 채택된 답변 10월 20일

@가을남자 님 아래 Microsoft Q&A 링크에 따르면,
Word는 문서를 이미지(JPG·PNG 등)로 직접 저장하는 기능을 제공하지 않는다고 합니다.

https://learn.microsoft.com/en-us/answers/questions/5168580/can-i-save-a-word-document-%28-docx%29-as-a-picture-%28

그러나 “왜 지원하지 않는가?”에 대한 공식 설명은 없고,

반면 아래한글은 이미지로 내보내기를 지원하지만, 해상도(DPI)를 보장하기 어렵다는 한계가 있습니다.

이와 관련하여 다음 논의들을 찾아보면,

https://www.reddit.com/r/vba/comments/zxv97q/export_word_document_as_a_jpeg_or_png/

Word는 텍스트 기반 문서 구조이며, 내용의 배치가 고정되지 않고
폰트·여백·용지·프린터·확대비율·편집 상황에 따라 동적으로 재배치되는 방식입니다.

예를 들어 Word 문서에서
글자 크기만 11pt → 12pt로 바꿔도
여백을 약간 조정해도
프린터 드라이버만 달라도
페이지 나눔, 줄바꿈, 개체 위치가 달라집니다.

이처럼 “내용이 특정 좌표에 고정되지 않고 흘러가는 구조”를 흔히 Flowing layout이라고 부르며,
고정된 이미지로 DPI를 보장할 수 없습니다.

반면에
PowerPoint처럼
확대/축소하거나 장치가 바뀌어도 내용의 상대 좌표와 크기가 변하지 않는 형태를
Fixed layout(고정 레이아웃) 이라 합니다.

이 경우에는 이미지 변환 시 해상도(DPI) 를 안정적으로 보장할 수 있습니다.

결론적으로
Word는 본질적으로 “작성 중인 문서”를 위한 도구이므로
픽셀 기반의 고정 상태로 문서를 저장하지 않고,
필요할 때 UI에 맞춰 화면을 즉시 재구성(render) 하는 구조입니다.

그렇기 때문에 “어떤 시점을 기준으로 고정시켜 이미지화할 것인가”라는 문제가 있으며,
이로 인해 이미지로 직접 내보내는 기능을 기본 UI에서 의도적으로
제외한 것으로 볼 수 있습니다~

가을남자 작성자 10월 20일

굉장히 복잡하고 어려운 문제네요..

자세한 답변 감사합니다.

어쩔 수 없이 외부 프로그램을 이용해야겠네요

질문답변 게시판의 최근 글

스크랩 완료