C++에서 프레젠테이션을 저장하는 방법

C++에서 프레젠테이션을 저장하는 방법

Aspose.Slides FOSS for C++ saves presentations exclusively to .pptx 형식 사용 prs.save(path, SaveFormat::PPTX). 이 가이드는 올바른 저장 패턴, 다른 경로에 저장하기, 그리고 일반적인 저장 관련 오류를 다룹니다.

단계별 가이드

단계 1: 라이브러리 빌드 및 링크

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .

단계 2: 프레젠테이션 열기 또는 만들기

스택 할당을 사용하여 소멸자가 자동으로 정리하도록 하세요. 호출 save() 객체가 범위를 벗어나기 전에.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    // Create new
    {
        asf::Presentation prs;
        prs.save("new.pptx", asf::SaveFormat::PPTX);
    }

    // Open existing
    {
        asf::Presentation prs("input.pptx");
        prs.save("output.pptx", asf::SaveFormat::PPTX);
    }

    return 0;
}

단계 3: 모든 수정 후 저장

다음 위치에 save() 모든 수정이 완료된 후, 그러나 다음이 되기 전에 호출 Presentation 범위를 벗어나기 전에.

#include <Aspose/Slides/Foss/presentation.h>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        asf::ShapeType::RECTANGLE, 50, 50, 300, 100);
    shape.text_frame()->set_text("Hello, World!");
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

단계 4: 다른 경로에 저장

원본을 수정하지 않고 새 파일을 만들기 위해 다른 출력 경로를 전달합니다:

asf::Presentation prs("template.pptx");
// modify ...
prs.save("customized.pptx", asf::SaveFormat::PPTX);

template.pptx 파일은 수정되지 않습니다; customized.pptx 생성됩니다(이미 존재하면 덮어쓰기됩니다).


단계 5: 출력 확인

저장 후 파일이 존재하는지 확인합니다:

#include <filesystem>
#include <iostream>

auto output = std::filesystem::path("output.pptx");
std::cout << "Saved: " << std::filesystem::exists(output)
          << ", size: " << std::filesystem::file_size(output) << " bytes\n";

지원되는 저장 형식

형식열거형 값지원됨
PPTX (Office Open XML)SaveFormat::PPTX
PDFN/A아니오
HTMLN/A아니오
SVGN/A아니오
PNG / JPEGN/A아니오
ODP (오픈문서)N/A아니오

PPTX만 지원됩니다. 다른 형식으로 저장을 시도하면 예외가 발생합니다.


일반적인 문제 및 해결책

쓰기 권한 거부 오류

출력 파일이 다른 애플리케이션에서 열려 있습니다(예: PowerPoint가 파일을 열고 있음). 저장하기 전에 다른 애플리케이션에서 파일을 닫으세요.

파일이 생성되었지만 비어 있거나 손상된 것으로 보입니다

보장하십시오 prs.save() 는 이전에 호출됩니다 Presentation 객체가 파괴됩니다. 파괴된 후 내부 상태가 해제되며 이후 호출은 실패하거나 잘못된 출력을 생성합니다.

저장 중 예외 발생

PPTX가 아닌 다른 저장 형식을 시도하거나 저장 중에 지원되지 않는 기능(예: 차트나 애니메이션)을 사용할 때 발생합니다.


자주 묻는 질문

열었던 파일에 그대로 저장할 수 있나요?

예. 동일한 경로에 저장하면 원본 파일이 덮어쓰기됩니다:

asf::Presentation prs("deck.pptx");
// modify ...
prs.save("deck.pptx", asf::SaveFormat::PPTX); // overwrites original

파일 대신 메모리 버퍼에 저장할 수 있나요?

직접 저장하는 것은 std::vector<uint8_t> 또는 std::ostream 는 현재 API에서 지원되지 않습니다. 임시 파일에 저장한 후 바이트를 읽으세요:

#include <filesystem>
#include <fstream>
#include <vector>

auto tmp = std::filesystem::temp_directory_path() / "temp.pptx";
prs.save(tmp.string(), asf::SaveFormat::PPTX);

std::ifstream in(tmp, std::ios::binary);
std::vector<uint8_t> bytes((std::istreambuf_iterator<char>(in)),
                            std::istreambuf_iterator<char>());
std::filesystem::remove(tmp);

저장 시 수정하지 않은 내용이 보존되나요?

예. 원본 파일의 알 수 없는 XML 파트는 그대로 보존됩니다. 라이브러리는 이해하는 문서 모델의 파트만 직렬화하고, 인식하지 못하는 XML은 그대로 전달합니다.


또 보기

 한국어