在 C++ 中将 PowerPoint 演示文稿转换为 HTML
概述
本文解释了如何使用 C++ 将 PowerPoint 演示文稿转换为 HTML 格式。它涵盖以下主题。
- 将 PowerPoint 转换为 HTML(C++)
- 将 PPT 转换为 HTML(C++)
- 将 PPTX 转换为 HTML(C++)
- 将 ODP 转换为 HTML(C++)
- 将 PowerPoint 幻灯片转换为 HTML(C++)
在 C++ 中将 PowerPoint 转换为 HTML
使用 C++ 示例代码请参见下面的章节,即 将 PowerPoint 转换为 HTML。代码可以在 Presentation 对象中加载多种格式,如 PPT、PPTX 和 ODP,并保存为 HTML 格式。
关于 PowerPoint 转换为 HTML
使用 Aspose.Slides for C++,应用程序和开发者可以将 PowerPoint 演示文稿转换为 HTML:PPTX 转 HTML 或 PPT 转 HTML。
Aspose.Slides 提供了许多选项(主要来自 HtmlOptions 类),定义了 PowerPoint 转 HTML 的转换过程:
- 将整个 PowerPoint 演示文稿转换为 HTML。
- 将 PowerPoint 演示文稿中的特定幻灯片转换为 HTML。
- 将演示文稿媒体(图像、视频等)转换为 HTML。
- 将 PowerPoint 演示文稿转换为响应式 HTML。
- 将 PowerPoint 演示文稿转换为包含或不包含演讲者备注的 HTML。
- 将 PowerPoint 演示文稿转换为包含或不包含批注的 HTML。
- 将 PowerPoint 演示文稿转换为使用原始或嵌入式字体的 HTML。
- 在使用新 CSS 样式时将 PowerPoint 演示文稿转换为 HTML。
使用其自身的 API,Aspose 开发了免费的 演示文稿转 HTML 转换器: PPT 转 HTML,PPTX 转 HTML,ODP 转 HTML 等。
您可能想查看 Aspose 的其他 免费转换器。
将 PowerPoint 转换为 HTML
使用 Aspose.Slides,您可以通过以下方式将整个 PowerPoint 演示文稿转换为 HTML:
- 创建一个 Presentation 类的实例。
- 在 Presentation 类中加载 .ppt 以 将 PPT 转换为 HTML(C++)
- 在 Presentation 类中加载 .pptx 以 将 PPTX 转换为 HTML(C++)
- 在 Presentation 类中加载 .odp 以 将 ODP 转换为 HTML(C++)
- 使用 Save 方法将对象保存为 HTML 文件。
以下代码演示了如何在 C++ 中将 PowerPoint 转换为 HTML:
// 实例化一个表示演示文稿文件的 Presentation 对象
auto presentation = System::MakeObject<Presentation>(u"Convert_HTML.pptx");
auto htmlOpt = System::MakeObject<HtmlOptions>();
htmlOpt->set_HtmlFormatter(HtmlFormatter::CreateDocumentFormatter(u"", false));
// 将演示文稿保存为 HTML
presentation->Save(u"ConvertWholePresentationToHTML_out.html", SaveFormat::Html, htmlOpt);
将 PowerPoint 转换为响应式 HTML
Aspose.Slides 提供了 ResponsiveHtmlController 类,可生成响应式 HTML 文件。以下代码演示了如何在 C++ 中将 PowerPoint 演示文稿转换为响应式 HTML:
// 实例化一个表示演示文稿文件的 Presentation 对象
auto presentation = System::MakeObject<Presentation>(u"Convert_HTML.pptx");
auto controller = System::MakeObject<ResponsiveHtmlController>();
auto htmlOptions = System::MakeObject<HtmlOptions>();
htmlOptions->set_HtmlFormatter(HtmlFormatter::CreateCustomFormatter(controller));
// 将演示文稿保存为 HTML
presentation->Save(u"ConvertPresentationToResponsiveHTML_out.html", SaveFormat::Html, htmlOptions);
将 PowerPoint 转换为带备注的 HTML
以下代码演示了如何在 C++ 中将 PowerPoint 转换为带备注的 HTML:
auto pres = System::MakeObject<Presentation>(u"Presentation.pptx");
auto opt = System::MakeObject<HtmlOptions>();
auto options = opt->get_NotesCommentsLayouting();
options->set_NotesPosition(NotesPositions::BottomFull);
// Saving notes pages
pres->Save(u"Output.html", SaveFormat::Html, opt);
将 PowerPoint 转换为带原始字体的 HTML
Aspose.Slides 提供了 EmbedAllFontsHtmlController 类,可在将演示文稿转换为 HTML 时嵌入所有字体。
为防止嵌入特定字体,您可以向 EmbedAllFontsHtmlController 类的参数化构造函数传递字体名称数组。常用字体,如 Calibri 或 Arial,在演示文稿中使用时无需嵌入,因为大多数系统已经包含这些字体。嵌入这些字体会导致生成的 HTML 文档体积不必要地增大。
EmbedAllFontsHtmlController 类支持继承,并提供了 WriteFont 方法,供子类重写。
auto pres = System::MakeObject<Presentation>(u"input.pptx");
// 排除默认演示文稿字体
auto fontNameExcludeList = System::MakeArray<System::String>({ u"Calibri", u"Arial" });
auto embedFontsController = System::MakeObject<EmbedAllFontsHtmlController>(fontNameExcludeList);
auto htmlOptionsEmbed = System::MakeObject<HtmlOptions>();
htmlOptionsEmbed->set_HtmlFormatter(HtmlFormatter::CreateCustomFormatter(embedFontsController));
pres->Save(u"input-PFDinDisplayPro-Regular-installed.html", SaveFormat::Html, htmlOptionsEmbed);
将 PowerPoint 转换为高质量图像的 HTML
默认情况下,将 PowerPoint 转换为 HTML 时,Aspose.Slides 生成的 HTML 较小,图像分辨率为 72 DPI 且裁剪区域被删除。若要获取图像质量更高的 HTML 文件,需要将 PicturesCompression 属性(来自 HtmlOptions 类)设置为 96(即 PicturesCompression::Dpi96)或更高的值。
以下 C++ 代码演示了如何在转换 PowerPoint 演示文稿为 HTML 时获取 150 DPI(即 PicturesCompression::Dpi150)的高质量图像:
auto pres = System::MakeObject<Presentation>(u"InputDoc.pptx");
auto htmlOpts = System::MakeObject<HtmlOptions>();
htmlOpts->set_PicturesCompression(PicturesCompression::Dpi150);
pres->Save(u"OutputDoc-dpi150.html", SaveFormat::Html, htmlOpts);
以下 C++ 代码演示了如何输出具有完整质量图像的 HTML:
auto pres = System::MakeObject<Presentation>(u"InputDoc.pptx");
auto htmlOpts = System::MakeObject<HtmlOptions>();
htmlOpts->set_DeletePicturesCroppedAreas(false);
pres->Save(u"Outputdoc-noCrop.html", SaveFormat::Html, htmlOpts);
将幻灯片转换为 HTML
要将 PowerPoint 中的特定幻灯片转换为 HTML,您需要实例化相同的 Presentation 类(用于将整个演示文稿转换为 HTML),然后使用 Save 方法将文件保存为 HTML。可以使用 HtmlOptions 类指定其他转换选项:
以下 C++ 代码演示了如何将 PowerPoint 演示文稿中的幻灯片转换为 HTML:
class CustomFormattingController : public IHtmlFormattingController
{
public:
void WriteDocumentStart(SharedPtr<IHtmlGenerator> generator, SharedPtr<IPresentation> presentation) override{}
void WriteDocumentEnd(SharedPtr<IHtmlGenerator> generator, SharedPtr<IPresentation> presentation) override{}
void WriteSlideStart(SharedPtr<IHtmlGenerator> generator, SharedPtr<ISlide> slide) override
{
generator->AddHtml(String::Format(SlideHeader, generator->get_SlideIndex() + 1));
}
void WriteSlideEnd(SharedPtr<IHtmlGenerator> generator, SharedPtr<ISlide> slide) override
{
generator->AddHtml(SlideFooter);
}
void WriteShapeStart(SharedPtr<IHtmlGenerator> generator, SharedPtr<IShape> shape) override{}
void WriteShapeEnd(SharedPtr<IHtmlGenerator> generator, SharedPtr<IShape> shape) override{}
private:
static const String SlideHeader;
static const String SlideFooter;
};
const String CustomFormattingController::SlideHeader = u"<div class=\"slide\" name=\"slide\" id=\"slide{0}\">";
const String CustomFormattingController::SlideFooter = u"</div>";
void Run()
{
String dataDir = GetDataPath();
auto presentation = System::MakeObject<Presentation>(dataDir + u"Individual-Slide.pptx");
auto formatter = HtmlFormatter::CreateCustomFormatter(MakeObject<CustomFormattingController>();
auto htmlOptions = System::MakeObject<HtmlOptions>();
htmlOptions->set_HtmlFormatter(formatter);
// 保存文件
for (int32_t i = 0; i < presentation->get_Slides()->get_Count(); i++)
{
presentation->Save(dataDir + u"Individual Slide" + (i + 1) + u"_out.html",
MakeArray<int32_t>({ i + 1 }), SaveFormat::Html, htmlOptions);
}
}
导出为 HTML 时保存 CSS 和图像
使用新的 CSS 样式文件,您可以轻松更改 PowerPoint 转 HTML 转换后生成的 HTML 文件的样式。
本示例中的 C++ 代码演示了如何使用可重写的方法创建带有 CSS 文件链接的自定义 HTML 文档:
class CustomHeaderAndFontsController : public EmbedAllFontsHtmlController
{
public:
CustomHeaderAndFontsController(String cssFileName)
: m_cssFileName(cssFileName)
{
}
void WriteDocumentStart(SharedPtr<IHtmlGenerator> generator, SharedPtr<IPresentation> presentation) override
{
generator->AddHtml(System::String::Format(Header, m_cssFileName));
WriteAllFonts(generator, presentation);
}
void WriteAllFonts(SharedPtr<IHtmlGenerator> generator, SharedPtr<IPresentation> presentation) override
{
generator->AddHtml(u"<!-- Embedded fonts -->");
EmbedAllFontsHtmlController::WriteAllFonts(generator, presentation);
}
private:
static const String Header;
String m_cssFileName;
};
const String CustomHeaderAndFontsController::Header = String(u"<!DOCTYPE html>\n") +
u"<html>\n" + u"<head>\n" +
u"<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">\n" +
u"<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\">\n" +
u"<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}\">\n" + u"</head>";
void Run()
{
// 文档目录的路径。
System::String dataDir = GetDataPath();
auto pres = System::MakeObject<Presentation>(u"pres.pptx");
auto htmlController = System::MakeObject<CustomHeaderAndFontsController>(u"styles.css");
auto options = System::MakeObject<HtmlOptions>();
options->set_HtmlFormatter(HtmlFormatter::CreateCustomFormatter(htmlController));
pres->Save(u"pres.html", SaveFormat::Html, options);
}
在将演示文稿转换为 HTML 时链接所有字体
如果您不想嵌入字体(以避免增大生成的 HTML 大小),可以通过实现自己的 LinkAllFontsHtmlController 版本来链接所有字体。
以下 C++ 代码演示了如何在链接所有字体且排除 “Calibri” 和 “Arial”(因为系统已存在这些字体)的情况下,将 PowerPoint 转换为 HTML:
class LinkAllFontsHtmlController : public EmbedAllFontsHtmlController
{
public:
LinkAllFontsHtmlController(ArrayPtr<String> fontNameExcludeList, String basePath)
: EmbedAllFontsHtmlController(fontNameExcludeList)
{
m_basePath = basePath;
}
void WriteFont(SharedPtr<IHtmlGenerator> generator, SharedPtr<IFontData> originalFont, SharedPtr<IFontData> substitutedFont,
String fontStyle, String fontWeight, ArrayPtr<uint8_t> fontData)
{
String fontName = substitutedFont == nullptr ? originalFont->get_FontName() : substitutedFont->get_FontName();
String path = String::Format(u"{0}.woff", fontName); // 可能需要对路径进行清理
IO::File::WriteAllBytes(IO::Path::Combine(m_basePath, path), fontData);
generator->AddHtml(u"<style>");
generator->AddHtml(u"@font-face { ");
generator->AddHtml(String::Format(u"font-family: '{0}'; ", fontName));
generator->AddHtml(String::Format(u"src: url('{0}')", path));
generator->AddHtml(u" }");
generator->AddHtml(u"</style>");
}
private:
String m_basePath;
};
void Run()
{
auto pres = System::MakeObject<Presentation>(u"pres.pptx");
// 排除默认演示文稿字体
auto fontNameExcludeList = System::MakeArray<String>({ u"Calibri", u"Arial" });
auto linkcont = System::MakeObject<LinkAllFontsHtmlController>(fontNameExcludeList, u"C://Windows//Fonts//");
System::SharedPtr<HtmlOptions> htmlOptionsEmbed = System::MakeObject<HtmlOptions>();
htmlOptionsEmbed->set_HtmlFormatter(HtmlFormatter::CreateCustomFormatter(linkcont));
pres->Save(u"pres.html", SaveFormat::Html, htmlOptionsEmbed);
}
将 PowerPoint 转换为响应式 HTML
以下 C++ 代码演示了如何将 PowerPoint 演示文稿转换为响应式 HTML:
auto presentation = System::MakeObject<Presentation>(u"SomePresentation.pptx");
auto saveOptions = System::MakeObject<HtmlOptions>();
saveOptions->set_SvgResponsiveLayout(true);
presentation->Save(u"SomePresentation-out.html", SaveFormat::Html, saveOptions);
将媒体文件导出为 HTML
使用 Aspose.Slides for C++,您可以按以下方式导出媒体文件:
- 创建一个 Presentation 类的实例。
- 获取对幻灯片的引用。
- 向幻灯片添加视频。
- 将演示文稿写入为 HTML 文件。
以下 C++ 代码演示了如何向演示文稿添加视频并将其保存为 HTML:
// 加载演示文稿
auto pres = System::MakeObject<Presentation>();
const System::String path = u"C:/out/";
const System::String fileName = u"ExportMediaFiles_out.html";
const System::String baseUri = u"http://www.example.com/";
auto fileStream = System::MakeObject<IO::FileStream>(u"my_video.avi", IO::FileMode::Open, IO::FileAccess::Read);
auto video = pres->get_Videos()->AddVideo(fileStream, Aspose::Slides::LoadingStreamBehavior::ReadStreamAndRelease);
auto slide = pres->get_Slides()->idx_get(0);
slide->get_Shapes()->AddVideoFrame(10.0f, 10.0f, 100.0f, 100.0f, video);
auto controller = System::MakeObject<VideoPlayerHtmlController>(path, fileName, baseUri);
// 设置 HTML 选项
auto htmlOptions = System::MakeObject<HtmlOptions>(controller);
auto svgOptions = System::MakeObject<SVGOptions>(controller);
htmlOptions->set_HtmlFormatter(HtmlFormatter::CreateCustomFormatter(controller));
htmlOptions->set_SlideImageFormat(SlideImageFormat::Svg(svgOptions));
// 保存文件
pres->Save(IO::Path::Combine(path, fileName), SaveFormat::Html, htmlOptions);
常见问题
在将多个演示文稿转换为 HTML 时,Aspose.Slides 的性能如何?
性能取决于演示文稿的大小和复杂度。Aspose.Slides 对批量操作具有高效且可扩展的性能。为了在转换大量演示文稿时获得最佳性能,建议尽可能使用多线程或并行处理。
Aspose.Slides 是否支持将超链接导出为 HTML?
是的,Aspose.Slides 完全支持将嵌入的超链接导出为 HTML。将演示文稿转换为 HTML 格式时,超链接会自动保留并保持可点击。
在将演示文稿转换为 HTML 时,幻灯片数量有没有限制?
使用 Aspose.Slides 时对幻灯片数量没有限制。您可以转换任何大小的演示文稿。不过,对于包含极多幻灯片的演示文稿,性能可能受服务器或系统可用资源的影响。
