在 C++ 中将 PowerPoint 转换为 PDF

概述

将 PowerPoint 文档转换为 PDF 格式提供多个优点,包括确保在不同设备之间的兼容性,以及保留演示文稿的布局和格式。本文将向您展示如何将演示文稿转换为 PDF 文档,使用各种选项控制图像质量,包含隐藏幻灯片,使用密码保护 PDF 文档,检测字体替换,选择要转换的幻灯片,并将合规标准应用于输出文档。

PowerPoint 到 PDF 转换

使用 Aspose.Slides,您可以将以下格式的演示文稿转换为 PDF:

  • PPT
  • PPTX
  • ODP

要将演示文稿转换为 PDF,您只需将文件名作为参数传递给 Presentation 类,然后使用 Save 方法将演示文稿保存为 PDF。Presentation 类暴露了通常用于将演示文稿转换为 PDF 的 Save 方法。

Aspose.Slides 允许您转换:

  • 整个演示文稿为 PDF
  • 演示文稿中的特定幻灯片为 PDF
  • 最终演示文稿

Aspose.Slides 将演示文稿导出为 PDF 的方式,使生成的 PDF 内容与原始演示文稿非常相似。以下已知元素和属性通常在演示文稿到 PDF 的转换中正确呈现:

  • 图像
  • 文本框和其他形状
  • 文本及其格式
  • 段落及其格式
  • 超链接
  • 页眉和页脚
  • 项目符号
  • 表格

将 PowerPoint 转换为 PDF

标准的 PowerPoint PDF 转换操作使用默认选项执行。在这种情况下,Aspose.Slides 尝试使用最佳设置在最高质量级别下转换提供的演示文稿为 PDF。

步骤:在 C++ 中将 PowerPoint 转换为 PDF | 步骤:在 C++ 中将 PPT 转换为 PDF | 步骤:在 C++ 中将 PPTX 转换为 PDF | 步骤:在 C++ 中将 ODP 转换为 PDF

以下 C++ 代码展示了如何将 PowerPoint 转换为 PDF:

// 实例化表示 PowerPoint 文件的 Presentation 类
auto presentation = System::MakeObject<Presentation>(u"PowerPoint.ppt");

// 将演示文稿保存为 PDF
presentation->Save(u"PPT-to-PDF.pdf", SaveFormat::Pdf);

使用选项将 PowerPoint 转换为 PDF

Aspose.Slides 提供自定义选项——PdfOptions 类下的属性——允许您自定义 PDF(从转换过程中得到的结果),使用密码锁定 PDF,甚至指定转换过程应该如何进行。

使用自定义选项将 PowerPoint 转换为 PDF

使用自定义转换选项,您可以为光栅图像设置首选质量设置,指定如何处理元文件,设置文本的压缩级别,设置图像的 DPI 等。

以下代码示例演示了一个 PowerPoint 演示文稿使用多个自定义选项转换为 PDF 的操作:

// 实例化 PdfOptions 类
auto pdfOptions = System::MakeObject<PdfOptions>();

// 设置 JPG 图像的质量
pdfOptions->set_JpegQuality(90);

// 为图像设置 DPI
pdfOptions->set_SufficientResolution(300);

// 设置元文件的行为
pdfOptions->set_SaveMetafilesAsPng(true);

// 设置文本内容的压缩级别
pdfOptions->set_TextCompression(PdfTextCompression::Flate);

// 定义 PDF 合规模式
pdfOptions->set_Compliance(PdfCompliance::Pdf15);

// 实例化表示 PowerPoint 文档的 Presentation 类
auto presentation = System::MakeObject<Presentation>(u"PowerPoint.pptx");

// 将演示文稿保存为 PDF 文档
presentation->Save(u"PowerPoint-to-PDF.pdf", SaveFormat::Pdf, pdfOptions);

presentation->Dispose();

将 PowerPoint 转换为带有隐藏幻灯片的 PDF

如果演示文稿包含隐藏幻灯片,您可以使用自定义选项——PdfOptions 类中的 ShowHiddenSlides 属性——指示 Aspose.Slides 在结果 PDF 中包含隐藏幻灯片作为页。

以下 C++ 代码展示了如何将 PowerPoint 演示文稿转换为包含隐藏幻灯片的 PDF:

// 实例化表示 PowerPoint 文件的 Presentation 类
auto presentation = System::MakeObject<Presentation>(u"PowerPoint.pptx");

// 实例化 PdfOptions 类
auto pdfOptions = System::MakeObject<PdfOptions>();

// 添加隐藏幻灯片
pdfOptions->set_ShowHiddenSlides(true);

// 将演示文稿保存为 PDF
presentation->Save(u"PowerPoint-to-PDF.pdf", SaveFormat::Pdf, pdfOptions);

将 PowerPoint 转换为受密码保护的 PDF

以下 C++ 代码展示了如何将 PowerPoint 转换为受密码保护的 PDF(使用 PdfOptions 类中的保护参数):

// 实例化表示 PowerPoint 文件的 Presentation 对象
auto presentation = System::MakeObject<Presentation>(u"PowerPoint.pptx");

/// 实例化 PdfOptions 类
auto pdfOptions = System::MakeObject<PdfOptions>();

// 设置 PDF 密码和访问权限
pdfOptions->set_Password(u"password");
pdfOptions->set_AccessPermissions(PdfAccessPermissions::PrintDocument | PdfAccessPermissions::HighQualityPrint);

// 将演示文稿保存为 PDF
presentation->Save(u"PPTX-to-PDF.pdf", SaveFormat::Pdf, pdfOptions);

检测字体替换

Aspose.Slides 提供了 get_WarningCallback() 方法在 SaveOptions 类下,允许您在演示文稿到 PDF 转换过程中检测字体替换。

以下 C++ 代码展示了如何检测字体替换:

class FontSubstSendsWarningCallback : public Warnings::IWarningCallback
{
public:
    Warnings::ReturnAction Warning(System::SharedPtr<Warnings::IWarningInfo> warning) override;
};

Warnings::ReturnAction FontSubstSendsWarningCallback::Warning(System::SharedPtr<Warnings::IWarningInfo> warning)
{
    if (warning->get_WarningType() == Warnings::WarningType::CompatibilityIssue)
    {
        return Warnings::ReturnAction::Continue;
    }

    if (warning->get_WarningType() == Warnings::WarningType::DataLoss && warning->get_Description().StartsWith(u"Font will be substituted"))
    {
        System::Console::WriteLine(u"字体替换警告: {0}", warning->get_Description());
    }

    return Warnings::ReturnAction::Continue;
}

接下来的 C++ 代码展示了如何使用上述类:

int main()
{
    System::SharedPtr<LoadOptions> loadOptions = System::MakeObject<LoadOptions>();
    System::SharedPtr<FontSubstSendsWarningCallback> warningCallback = System::MakeObject<FontSubstSendsWarningCallback>();
    loadOptions->set_WarningCallback(warningCallback);

    System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx", loadOptions);
    return 0;
}

将 PowerPoint 中的选定幻灯片转换为 PDF

以下 C++ 代码展示了如何将 PowerPoint 演示文稿中的特定幻灯片转换为 PDF:

// 实例化表示 PowerPoint 文件的 Presentation 对象
auto presentation = System::MakeObject<Presentation>(u"PowerPoint.pptx");

// 设置幻灯片位置数组
auto slides = System::MakeArray<int32_t>({1, 3});

// 将演示文稿保存为 PDF
presentation->Save(u"PPTX-to-PDF.pdf", slides, SaveFormat::Pdf);

使用自定义幻灯片大小将 PowerPoint 转换为 PDF

以下 C++ 代码展示了如何在指定幻灯片大小的情况下将 PowerPoint 转换为 PDF:

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

// 实例化表示 PowerPoint 文件的 Presentation 对象 
auto presentation = System::MakeObject<Presentation>(dataDir + u"SelectedSlides.pptx");
auto auxPresentation = System::MakeObject<Presentation>();

auto slide = presentation->get_Slides()->idx_get(0);

auxPresentation->get_Slides()->InsertClone(0, slide);

// 设置幻灯片类型和大小 
auxPresentation->get_SlideSize()->SetSize(612.F, 792.F, SlideSizeScaleType::EnsureFit);

auto pdfOptions = System::MakeObject<PdfOptions>();
auto options = pdfOptions->get_NotesCommentsLayouting();
options->set_NotesPosition(NotesPositions::BottomFull);

auxPresentation->Save(dataDir + u"PDFnotes_out.pdf", SaveFormat::Pdf, pdfOptions);

在备注幻灯片视图中将 PowerPoint 转换为 PDF

以下 C++ 代码展示了如何将 PowerPoint 转换为 PDF 备注:

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

// 实例化表示 PowerPoint 文件的 Presentation 类
auto presentation = System::MakeObject<Presentation>(dataDir + u"NotesFile.pptx");

auto pdfOptions = System::MakeObject<PdfOptions>();
auto options = pdfOptions->get_NotesCommentsLayouting();
options->set_NotesPosition(NotesPositions::BottomFull);

// 将演示文稿保存为 PDF 备注
presentation->Save(dataDir + u"Pdf_Notes_out.tiff", SaveFormat::Pdf, pdfOptions);

PDF 的可访问性和合规标准

Aspose.Slides 允许您使用符合 Web 内容可访问性指南 (WCAG) 的转换程序。您可以使用以下任何合规标准将 PowerPoint 文档导出为 PDF:PDF/A1aPDF/A1bPDF/UA

以下 C++ 代码演示了一种 PowerPoint 到 PDF 的转换操作,其中根据不同的合规标准获得多个 PDF:

auto pres = System::MakeObject<Presentation>(u"pres.pptx");

auto pdfOptionsA1a = System::MakeObject<PdfOptions>();
pdfOptionsA1a->set_Compliance(PdfCompliance::PdfA1a);
pres->Save(u"pres-a1a-compliance.pdf", SaveFormat::Pdf, pdfOptionsA1a);

auto pdfOptionsA1b = System::MakeObject<PdfOptions>();
pdfOptionsA1b->set_Compliance(PdfCompliance::PdfA1b);
pres->Save(u"pres-a1b-compliance.pdf", SaveFormat::Pdf, pdfOptionsA1b);

auto pdfOptionsUa = System::MakeObject<PdfOptions>();
pdfOptionsUa->set_Compliance(PdfCompliance::PdfUa);
pres->Save(u"pres-ua-compliance.pdf", SaveFormat::Pdf, pdfOptionsUa);