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(OpenDocument)N/Aいいえ

サポートされているのは PPTX のみです。他のフォーマットで保存しようとすると例外がスローされます。.


一般的な問題と対策

書き込み時の Permission denied エラー

出力ファイルが別のアプリケーションで開かれています(例: 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 はそのまま通過させます。.


参照

 日本語