- 목적 : 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();
}
}
}
정상적으로 변환되는 부분 확인가능