打开演示文稿 - C++ PowerPoint API

除了从头创建 PowerPoint 演示文稿外,Aspose.Slides 还允许您打开现有演示文稿。加载演示文稿后,您可以获取有关演示文稿的信息,编辑演示文稿(幻灯片上的内容),添加新幻灯片或删除现有幻灯片等。

打开演示文稿

要打开现有的演示文稿,您只需实例化 Presentation 类并将文件路径(您要打开的演示文稿的路径)传递给其构造函数。

以下 C++ 代码演示了如何打开演示文稿并找出其中包含的幻灯片数量:

// 文档目录的路径。
String dataDir = u"";

// 实例化 Presentation 类并将文件路径传递给其构造函数
auto pres = System::MakeObject<Presentation>(dataDir + u"OpenPresentation.pptx");

// 打印演示文稿中幻灯片的总数
Console::WriteLine(Convert::ToString(pres->get_Slides()->get_Count()));

打开受密码保护的演示文稿

当您需要打开一个受密码保护的演示文稿时,您可以通过 get_Password() 属性(来自 LoadOptions 类)传递密码,以解密演示文稿并加载它。以下 C++ 代码演示了该操作:

System::SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>();
loadOptions->set_Password(u"YOUR_PASSWORD");
auto presentation = System::MakeObject<Presentation>(u"pres.pptx", loadOptions);
// 对解密后的演示文稿执行一些操作

打开大型演示文稿

Aspose.Slides 提供选项(特别是 BlobManagementOptions 属性)在 LoadOptions 类下,允许您加载大型演示文稿。

以下 C++ 代码演示了加载一个大型演示文稿(例如 2GB 大小)的操作:

String pathToVeryLargePresentationFile = u"veryLargePresentation.pptx";

{
    SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>();
    // 选择 KeepLocked 行为 - "veryLargePresentation.pptx" 将在演示文稿实例的生命周期内被锁定,
    // 但我们不需要将其加载到内存或复制到临时文件
    loadOptions->get_BlobManagementOptions()->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);

    auto pres = System::MakeObject<Presentation>(pathToVeryLargePresentationFile, loadOptions);

    // 大型演示文稿已加载并可以使用,但内存消耗仍然很低。

    // 对演示文稿进行更改。
    pres->get_Slides()->idx_get(0)->set_Name(u"非常大的演示文稿");

    // 演示文稿将保存到其他文件。该操作期间内存消耗保持较低
    pres->Save(u"veryLargePresentation-copy.pptx", SaveFormat::Pptx);

    // 不能这样做!由于文件在 pres 对象存在时被锁定,将抛出 IO 异常
    File::Delete(pathToVeryLargePresentationFile);
}

// 在这里可以这样做。源文件不被 pres 对象锁定
File::Delete(pathToVeryLargePresentationFile);

加载演示文稿

Aspose.Slides 提供 IResourceLoadingCallback 具有单个方法,使您能够管理外部资源。以下 C++ 代码演示了如何使用 IResourceLoadingCallback 接口:

// 文档目录的路径。
System::String dataDir = GetDataPath();

auto opts = System::MakeObject<LoadOptions>();
opts->set_ResourceLoadingCallback(System::MakeObject<ImageLoadingHandler>(dataDir));
auto presentation = System::MakeObject<Presentation>(dataDir + u"presentation.pptx", opts);
class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
    ImageLoadingHandler(String dataDir)
        : m_dataDir(dataDir)
    {
    }

    ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
    {
        if (args->get_OriginalUri().EndsWith(u".jpg"))
        {
            try
            {
                System::ArrayPtr<uint8_t> imageBytes = File::ReadAllBytes(Path::Combine(m_dataDir, u"aspose-logo.jpg"));
                args->SetData(imageBytes);
                return ResourceLoadingAction::UserProvided;
            }
            catch (System::Exception&)
            {
                return ResourceLoadingAction::Skip;
            }
        }

        if (args->get_OriginalUri().EndsWith(u".png"))
        {
            // 设置替代网址
            args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction::Default;
        }

        // 跳过所有其他图像
        return ResourceLoadingAction::Skip;
    }
    
private:
    String m_dataDir;
};

打开和保存演示文稿

步骤:在 C++ 中打开和保存演示文稿

  1. 创建 Presentation 类的实例并传递您要打开的文件。

  2. 保存演示文稿。

     const String outPath = u"../out/SaveToFile_out.ppt";
       	
     SharedPtr<Presentation> pres = MakeObject<Presentation>();
       
     // pres->get_ProtectionManager()->Encrypt(u"pass");
     // ...在这里执行一些工作..
       
     pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);