티스토리 뷰



프로젝트를 진행하는 과정에서 문서들을 워드, 엑셀이나 파워포인트 문서로 작성하다가 발주처나 타사에게는 대부분 PDF파일로 제공합니다. 보안성, 파일 크기, 호환성 등 여러모로 PDF로 전달하는 것이 장점이 많습니다. 그런데, 저장할 문서가 많거나 매일 매일 리비전 문서를 웹에 자동 게시하는 경우등에는 사람이 개입하지 않고 자동적으로 일괄로 PDF로 저장하는 방법이 필요 합니다.


이런 필요를 채울 수 있는 방법으로 전문 문서 변환 도구를 사용할 수도 있지만 도구에 따라 문서의 형태가 이상해지거나 하면 낭패를 볼 수도 있으므로 가장 안전한 방법은 워드, 엑셀, 파워포인트 제작사의 도구를 활용하는 방법 입니다. 마이크로소프트사에서 오피스 2007을 발표할 시점에는 오피스 도구들에 PDF로 저장하는 기능을 기본 장착하려고 했지만, PDF 소유사인 어도비(Adobe)와의 이슈가 해결되지 않아 PDF로 저장하는 기능은 추후에 Add-in으로 제공 했다고 합니다.


사용하는 워드나 엑셀에서 다른이름으로 저장(Save As) 메뉴에 "PDF 또는 XPS"메뉴가 나오지 않는다면 "2007 Microsoft Office Add-in"을 마이크로소프트사 사이트에서 내려받아 설치 합니다. 다운로드 주소는 https://www.microsoft.com/en-us/download/details.aspx?id=7 입니다.



정상적으로 설치 했으면 메뉴에 위의 그림과 같이 PDF 저장 메뉴가 나옵니다.


폴더 단위로 문서들을 일괄 변환하는 원리는 매크로를 이용해 지정한 폴더를 검색해서 파일중에 특정 확장자를 찾아 문서 열기>PDF로 저장>문서 닫기를 자동으로 수행하는 것입니다. 워드, 엑셀, 파워포인트 별로 스크립트 내용이 조금씩 다르지만, 유사하므로 각 매크로에서 폴더명만 바꾸어서 실행시키면 동일한 파일명에 *.pdf로 해서 새로운 파일을 생성 합니다.




■ 매크로 작성 및 테스트



우선 오피스(워드, 엑셀, 파워포인트) 프로그램을 실행시키고 문서를 열지 않은 상태로 둡니다. 매크로 작성 및 실행은 "보기>매크로"에서 수행 합니다. 위의 그림은 워드에서 새로운 매크로를 만드는 화면으로 Doc2Pdf로 이름을 입력하고 만들기를 클릭 합니다.




비주얼베이직 스크립트(VB Script) 코드를 작성할 수 있는 화면이 나오면 워드, 엑셀, 파워포인트에 해당하는 코드를 입력 합니다. 실제 코드는 아래에 기술하고 있는 스크립트를 참조합니다. 코드 중에 sFolder로 지정하는 폴더를 반드시 확인하여 변환하려는 문서들이 있는 폴더를 입력 합니다.



코드 상단의 초록색 화살표 아이콘을 클릭하여 실행하면 자동적으로 문서 변환을 수행하는데, 스크립트 선택을 요구하면 방금 작성한 코드를 선택하고 Run하면 됩니다.



■ 워드 문서 일괄 변환 매크로


Sub Doc2Pdf()
  Dim fso, folder, files, NewsFile, sFolder

  Set fso = CreateObject("Scripting.FileSystemObject")
  sFolder = "C:\tmp\docpdf\"
  Set folder = fso.GetFolder(sFolder)
  Set files = folder.files

  For Each folderIdx In files
    If (InStr(1, folderIdx.Name, ".doc", vbTextCompare)) Then
        Documents.Open FileName:=sFolder + folderIdx.Name
        ActiveDocument.ExportAsFixedFormat OutputFileName:=sFolder + Left(folderIdx.Name, Len(folderIdx.Name) - 4) + ".pdf", ExportFormat:=wdExportFormatPDF
        ActiveDocument.Close
    ElseIf (InStr(1, folderIdx.Name, ".docx", vbTextCompare)) Then
        Documents.Open FileName:=sFolder + folderIdx.Name
        ActiveDocument.ExportAsFixedFormat OutputFileName:=sFolder + Left(folderIdx.Name, Len(folderIdx.Name) - 5) + ".pdf", ExportFormat:=wdExportFormatPDF
        ActiveDocument.Close
    End If
  Next
End Sub



■ 엑셀 문서 일괄 변환 매크로


Sub Xls2Pdf()
  Dim fso, folder, files, NewsFile, sFolder

  Set fso = CreateObject("Scripting.FileSystemObject")
  sFolder = "C:\tmp\docpdf\"
  Set folder = fso.GetFolder(sFolder)
  Set files = folder.files

  For Each folderIdx In files
    If (InStr(1, folderIdx.Name, ".xls", vbTextCompare)) Then
        Workbooks.Open Filename:=sFolder + folderIdx.Name
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFolder + Left(folderIdx.Name, Len(folderIdx.Name) - 4) + ".pdf"
        ActiveWorkbook.Close
    ElseIf (InStr(1, folderIdx.Name, ".xlsx", vbTextCompare)) Then
        Workbooks.Open Filename:=sFolder + folderIdx.Name
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFolder + Left(folderIdx.Name, Len(folderIdx.Name) - 5) + ".pdf"
        ActiveWorkbook.Close
    End If
  Next
End Sub



■ 파워포인트 문서 일괄 변환 매크로


Sub Ppt2Pdf()
 Dim fso, folder, files, NewsFile, sFolder

  Set fso = CreateObject("Scripting.FileSystemObject")
  sFolder = "C:\tmp\docpdf\"
  Set folder = fso.GetFolder(sFolder)
  Set files = folder.files

  For Each folderIdx In files
    If (InStr(1, folderIdx.Name, ".ppt", vbTextCompare)) Then
        Presentations.Open FileName:=sFolder + folderIdx.Name
        ActivePresentation.ExportAsFixedFormat sFolder + Left(folderIdx.Name, Len(folderIdx.Name) - 4) + ".pdf", ppFixedFormatTypePDF
        ActivePresentation.Close
    End If
    If (InStr(1, folderIdx.Name, ".pptx", vbTextCompare)) Then
        Presentations.Open FileName:=sFolder + folderIdx.Name
        ActivePresentation.ExportAsFixedFormat sFolder + Left(folderIdx.Name, Len(folderIdx.Name) - 5) + ".pdf", ppFixedFormatTypePDF
        ActivePresentation.Close
    End If
  Next
End Sub





댓글
댓글쓰기 폼