C++でプレゼンテーションをロードする方法

C++でプレゼンテーションをロードする方法

Aspose.Slides FOSS for C++ は任意の .pptx ファイルを開き、その内容を検査し、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: 既存のプレゼンテーションを開く

ファイルパスをPresentationコンストラクタに渡します。デストラクタがクリーンアップを処理します。

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

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

    asf::Presentation prs("input.pptx");
    std::cout << "Slide count: " << prs.slides().size() << "\n";
    prs.save("output.pptx", asf::SaveFormat::PPTX);
    return 0;
}

ソースファイル内の不明なXMLパーツはそのまま保持されます:ライブラリはまだ理解できないコンテンツを削除しません。


ステップ 3: スライドを検査

すべてのスライドを反復処理し、シェイプ数を出力する:

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

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

    asf::Presentation prs("deck.pptx");
    for (size_t i = 0; i < prs.slides().size(); ++i) {
        auto& slide = prs.slides()[i];
        std::cout << "Slide " << i << ": "
                  << slide.shapes().size() << " shapes\n";
    }
    return 0;
}

ステップ 4: シェイプ テキストの読み取り

シェイプを反復処理し、TextFrame を持つシェイプからテキストを読み取ります:

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

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

    asf::Presentation prs("deck.pptx");
    for (size_t i = 0; i < prs.slides().size(); ++i) {
        auto& slide = prs.slides()[i];
        for (size_t j = 0; j < slide.shapes().size(); ++j) {
            auto& shape = slide.shapes()[j];
            if (shape.has_text_frame()) {
                auto text = shape.text_frame()->text();
                if (!text.empty()) {
                    std::cout << "  Shape text: " << text << "\n";
                }
            }
        }
    }
    return 0;
}

ステップ5: ドキュメント プロパティの読み取り

prs.document_properties() からコア文書プロパティにアクセス:

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

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

    asf::Presentation prs("deck.pptx");
    auto& props = prs.document_properties();
    std::cout << "Title:   " << props.title() << "\n";
    std::cout << "Author:  " << props.author() << "\n";
    std::cout << "Subject: " << props.subject() << "\n";
    return 0;
}

ステップ 6: ラウンドトリップ保存

プレゼンテーションを検査または変更した後、PPTX に保存し直します:

prs.save("output.pptx", asf::SaveFormat::PPTX);

別のパスに保存すると新しいファイルが作成されます。同じパスに保存すると元のファイルが上書きされます。


一般的な問題と対処法

ファイルが見つからないか、開くことができません

作業ディレクトリに対して、.pptx ファイルへのパスが正しいか確認してください。堅牢なパス構築には std::filesystem::path を使用してください:

#include <filesystem>
auto path = std::filesystem::path(__FILE__).parent_path() / "assets" / "deck.pptx";
asf::Presentation prs(path.string());

例外: ファイル形式はサポートされていません

このライブラリは.pptx(Office Open XML)のみをサポートしています。レガシー.ppt(バイナリ PowerPoint 97-2003)ファイルはサポートされていません。

Shape に text_frame がありません

一部のシェイプ(Connectors、PictureFrames、GroupShapes)にはテキストフレームがありません。テキストにアクセスする前にshape.has_text_frame()でガードしてください。


よくある質問

ロードすると元のコンテンツはすべて保持されますか?

はい。未知の XML パーツは往復保存時にそのまま保持されます。ライブラリはドキュメントモデルが理解できる部分のみをシリアライズし、認識できない XML はそのまま通過させます。

パスワードで保護された PPTX を読み込めますか?

パスワードで保護された(暗号化された)プレゼンテーションは、このエディションではサポートされていません。

埋め込み画像を抽出できますか?

画像コレクションにアクセスします: prs.images()ImageCollection を返します。各画像には、生の画像データを読み取るための width()height()、および binary_data() メソッドがあります。

インメモリバッファからのロードはサポートされていますか?

現在の API では std::vector<uint8_t> または std::istream からのロードは公開されていません。バイトを一時ファイルに書き込み、次にそのパスを Presentation コンストラクタに渡してください。


参照

 日本語