- 목적 : PPT파일 수정 후, 변환하는 부분이 귀찮아졌다. 그냥 저장만하고 매일 오후 5시 55분경 자동으로 PDF 변환 하고싶음

- 시도한 부분 

  1. LibreOffice  :  기존 PPT파일에서 PDF로 전환은 정상적으로 되나, 서식 부분이 엇나감. 

                             텍스트에 삽입한 링크의 경우 정상적이나, 이미지에 삽입한 링크(SRM 사이트 주소 등 ) 의 경우 정상적으로 작동안함

  2.  Apache POI + PDFBox : 의존성 추가 후, 진행했음. 정상적으로 진행이되나, 텍스트가 깨짐, 이미지도 많이 깨져서나옴. 링크 및 서식의경우 지정이 돼지않음 ( GPT로 확인해보니 텍스트와 이미지를 "이미지화" 하는 방법이라고 함 ) 

 

3. VBA 활용 : 윈도우환경에서만 가능하고, PPT가 깔려있어야됨

 

 

하기 내용 메모장에 복사

(경로에 따라 수정해준다.)

' convertPptToPdf.vbs
Dim pptApp, pptPresentation, pptFilePath, pdfFilePath, currentDate, formattedDate, fso, version, versionStr

' PPT 원본 파일 경로 설정 (본인 환경에 맞게 수정)
pptFilePath = "D:\업무\보고\유지보수.pptx"

' 현재 날짜 가져오기
currentDate = Date

' YYYYMMDD 형식으로 날짜 포맷팅 (월과 일이 항상 두 자리)
formattedDate = Year(currentDate) & Right("0" & Month(currentDate), 2) & Right("0" & Day(currentDate), 2)

' FileSystemObject를 생성하여 파일 존재 여부 체크
Set fso = CreateObject("Scripting.FileSystemObject")
version = 1
Do
    ' 버전 번호를 항상 두 자리 형식(예: "01", "02")으로 변환
    versionStr = Right("0" & version, 2)
    pdfFilePath = "D:\업무\보고\유지보수_" & formattedDate & "_ver_" & versionStr & ".pdf"
    
    ' 만약 해당 경로에 파일이 없으면 반복문 종료
    If Not fso.FileExists(pdfFilePath) Then
        Exit Do
    End If
    version = version + 1
Loop
Set fso = Nothing

' PowerPoint 애플리케이션 생성 
Set pptApp = CreateObject("PowerPoint.Application")
pptApp.Visible = True
pptApp.WindowState = 2  ' 2는 최소화 상태

' PPT 파일 열기 (ReadOnly: True, Untitled: False, WithWindow: False)
Set pptPresentation = pptApp.Presentations.Open(pptFilePath, True, False, False)

' PDF로 저장 (32는 PDF 형식)
pptPresentation.SaveAs pdfFilePath, 32

' PPT 파일 닫기 및 PowerPoint 종료
pptPresentation.Close
pptApp.Quit

Set pptPresentation = Nothing
Set pptApp = Nothing

MsgBox "PPT가 PDF로 변환되었습니다: " & pdfFilePath

상기 스크립트를 테스트할려면 CMD에서

D:
cscript.exe //NoLogo convertPptToPdf.vbs

로 테스트 해보자.

 

추가로 상기 소스에서 pptApp.Visible = False로 한다면 에러가남 

D:\convertPptToPdf.vbs(19, 1) Microsoft PowerPoint: Application.Visible : Invalid request.  Hiding the application window is not allowed.

스택플로우 뒤져봤는데 잘모르겠다. 찾게되면 수정예정..

 

 

인코딩 ANSI 선택
파일형식 모든파일 선택 

저장

 

public class PptToPdfVBA {
    public static void main(String[] args) {
       try {
          // VBScript 파일의 전체 경로 (본인 환경에 맞게 수정)
          String scriptPath = "D:\\convertPptToPdf.vbs";

          // cscript.exe를 통해 VBScript 실행
          ProcessBuilder pb = new ProcessBuilder("cscript.exe", "//NoLogo", scriptPath);
          Process process = pb.start();

          BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
          String line;
          while ((line = reader.readLine()) != null) {
             System.out.println(line);
          }

          process.waitFor();
          System.out.println("PPT가 PDF로 변환되었습니다.");
       } catch (Exception e) {
          e.printStackTrace();
       }
    }
}

 

정상적으로 변환되는 부분 확인가능

+ Recent posts