在 Android 上将 PowerPoint 演示文稿转换为 HTML
概述
本文介绍如何使用 Java 将 PowerPoint 演示文稿转换为 HTML 格式。它涵盖以下主题。
- 在 Java 中将 PowerPoint 转换为 HTML
- 在 Java 中将 PPT 转换为 HTML
- 在 Java 中将 PPTX 转换为 HTML
- 在 Java 中将 ODP 转换为 HTML
- 在 Java 中将 PowerPoint 幻灯片转换为 HTML
在 Android 上将 PowerPoint 转换为 HTML
如需 Java 示例代码将 PowerPoint 转换为 HTML,请参见下文【将 PowerPoint 转换为 HTML】。该代码可以在 Presentation 对象中加载 PPT、PPTX、ODP 等多种格式并保存为 HTML 格式。
关于 PowerPoint 到 HTML 转换
使用 Aspose.Slides for Android via Java,应用程序和开发人员可以将 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 类的实例。
- 使用 Save 方法将对象保存为 HTML 文件。
此代码演示如何在 Java 中将 PowerPoint 转换为 HTML:
// 实例化一个表示演示文稿文件的 Presentation 对象
Presentation pres = new Presentation("Convert_HTML.pptx");
try {
HtmlOptions htmlOpt = new HtmlOptions();
htmlOpt.getNotesCommentsLayouting().setNotesPosition(NotesPositions.BottomFull);
htmlOpt.setHtmlFormatter(HtmlFormatter.createDocumentFormatter("", false));
// 将演示文稿保存为 HTML
pres.save("ConvertWholePresentationToHTML_out.html", SaveFormat.Html, htmlOpt);
} finally {
if (pres != null) pres.dispose();
}
将 PowerPoint 转换为响应式 HTML
Aspose.Slides 提供了 ResponsiveHtmlController 类,可生成响应式 HTML 文件。此代码演示如何在 Java 中将 PowerPoint 演示文稿转换为响应式 HTML:
// 实例化一个表示演示文稿文件的 Presentation 对象
Presentation pres = new Presentation("Convert_HTML.pptx");
try {
ResponsiveHtmlController controller = new ResponsiveHtmlController();
HtmlOptions htmlOptions = new HtmlOptions();
htmlOptions.setHtmlFormatter(HtmlFormatter.createCustomFormatter(controller));
// 将演示文稿保存为 HTML
pres.save("ConvertPresentationToResponsiveHTML_out.html", SaveFormat.Html, htmlOptions);
} finally {
if (pres != null) pres.dispose();
}
将 PowerPoint 转换为带备注的 HTML
此代码演示如何在 Java 中将 PowerPoint 转换为带备注的 HTML:
Presentation pres = new Presentation("Presentation.pptx");
try {
HtmlOptions opt = new HtmlOptions();
INotesCommentsLayoutingOptions options = opt.getNotesCommentsLayouting();
options.setNotesPosition(NotesPositions.BottomFull);
// 保存备注页面
pres.save("Output.html", SaveFormat.Html, opt);
} finally {
if (pres != null) pres.dispose();
}
将 PowerPoint 转换为带原始字体的 HTML
Aspose.Slides 提供了 EmbedAllFontsHtmlController 类,可在将演示文稿转换为 HTML 时嵌入所有字体。
为了防止某些字体被嵌入,您可以向 EmbedAllFontsHtmlController 类的参数化构造函数传递字体名称数组。像 Calibri 或 Arial 这样的常用字体在演示文稿中使用时无需嵌入,因为大多数系统已经包含这些字体。若将这些字体嵌入,生成的 HTML 文档会不必要地增大。
EmbedAllFontsHtmlController 类支持继承,并提供 WriteFont 方法,可供重写。
Presentation pres = new Presentation("input.pptx");
try {
// 排除默认演示文稿字体
String[] fontNameExcludeList = { "Calibri", "Arial" };
EmbedAllFontsHtmlController embedFontsController = new EmbedAllFontsHtmlController(fontNameExcludeList);
HtmlOptions htmlOptionsEmbed = new HtmlOptions();
htmlOptionsEmbed.setHtmlFormatter(HtmlFormatter.createCustomFormatter(embedFontsController));
pres.save("input-PFDinDisplayPro-Regular-installed.html", SaveFormat.Html, htmlOptionsEmbed);
} finally {
if (pres != null) pres.dispose();
}
将 PowerPoint 转换为带高质量图像的 HTML
默认情况下,将 PowerPoint 转换为 HTML 时,Aspose.Slides 会输出图像分辨率为 72 DPI、并删除裁剪区域的较小 HTML。若要获得更高质量图像的 HTML 文件,需要将 PicturesCompression 属性(来自 HtmlOptions 类)设置为 96(即 PicturesCompression.Dpi96)或更高的数值。
此 Java 代码演示如何在获取 150 DPI 高质量图像(即 PicturesCompression.Dpi150)的情况下将 PowerPoint 演示文稿转换为 HTML:
Presentation pres = new Presentation("InputDoc.pptx");
try {
HtmlOptions htmlOpts = new HtmlOptions();
htmlOpts.setPicturesCompression(PicturesCompression.Dpi150);
pres.save("OutputDoc-dpi150.html", SaveFormat.Html, htmlOpts);
} finally {
if (pres != null) pres.dispose();
}
此 Java 代码演示如何输出包含完整质量图像的 HTML:
Presentation pres = new Presentation("InputDoc.pptx");
try {
HtmlOptions htmlOpts = new HtmlOptions();
htmlOpts.setDeletePicturesCroppedAreas(false);
pres.save("Outputdoc-noCrop.html", SaveFormat.Html, htmlOpts);
} finally {
if (pres != null) pres.dispose();
}
将幻灯片转换为 HTML
要将 PowerPoint 中的特定幻灯片转换为 HTML,需实例化同样的 Presentation 类(用于将整个演示文稿转换为 HTML),然后使用 Save 方法将文件保存为 HTML。可以使用 HtmlOptions 类指定其他转换选项:
此 Java 代码演示如何将 PowerPoint 演示文稿中的幻灯片转换为 HTML:
Presentation pres = new Presentation("Individual-Slide.pptx");
try {
HtmlOptions htmlOptions = new HtmlOptions();
htmlOptions.getNotesCommentsLayouting().setNotesPosition(NotesPositions.BottomFull);
htmlOptions.setHtmlFormatter(HtmlFormatter.createCustomFormatter(new CustomFormattingController()));
// 保存文件
for (int i = 0; i < pres.getSlides().size(); i++)
pres.save("Individual Slide" + (i + 1) + "_out.html", new int[]{i + 1},SaveFormat.Html, htmlOptions);
} finally {
if (pres != null) pres.dispose();
}
public class CustomFormattingController implements IHtmlFormattingController
{
@Override
public void writeDocumentStart(IHtmlGenerator generator, IPresentation presentation) { }
@Override
public void writeDocumentEnd(IHtmlGenerator generator, IPresentation presentation) { }
@Override
public void writeSlideStart(IHtmlGenerator generator, ISlide slide)
{
generator.addHtml(String.format(SlideHeader, generator.getSlideIndex() + 1));
}
@Override
public void writeSlideEnd(IHtmlGenerator generator, ISlide slide)
{
generator.addHtml(SlideFooter);
}
@Override
public void writeShapeStart(IHtmlGenerator generator, IShape shape) { }
@Override
public void writeShapeEnd(IHtmlGenerator generator, IShape shape) { }
private final String SlideHeader = "<div class=\"slide\" name=\"slide\" id=\"slide%d\">";
private final String SlideFooter = "</div>";
}
导出为 HTML 时保存 CSS 和图像
使用新的 CSS 样式文件,可轻松更改 PowerPoint 转 HTML 过程生成的 HTML 文件的样式。
本示例中的 Java 代码演示如何使用可重写的方法创建带有 CSS 文件链接的自定义 HTML 文档:
Presentation pres = new Presentation("pres.pptx");
try {
CustomHeaderAndFontsController htmlController = new CustomHeaderAndFontsController("styles.css");
HtmlOptions options = new HtmlOptions();
options.setHtmlFormatter(HtmlFormatter.createCustomFormatter(htmlController));
pres.save("pres.html", SaveFormat.Html, options);
} finally {
if (pres != null) pres.dispose();
}
public class CustomHeaderAndFontsController extends EmbedAllFontsHtmlController
{
private final int m_basePath = 0;
// 自定义页眉模板
final static String Header = "<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n" +
"<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\">\n" +
"<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\">\n" +
"</head>";
private final String m_cssFileName;
public CustomHeaderAndFontsController(String cssFileName)
{
m_cssFileName = cssFileName;
}
public void writeDocumentStart(IHtmlGenerator generator, IPresentation presentation)
{
generator.addHtml(String.format(Header, m_cssFileName));
writeAllFonts(generator, presentation);
}
public void writeAllFonts(IHtmlGenerator generator, IPresentation presentation)
{
generator.addHtml("<!-- Embedded fonts -->");
super.writeAllFonts(generator, presentation);
}
}
在将演示文稿转换为 HTML 时链接所有字体
如果不想嵌入字体(以避免增大生成的 HTML 大小),可以通过实现自己的 LinkAllFontsHtmlController 版本来链接所有字体。
此 Java 代码演示如何在链接所有字体的同时,将 PowerPoint 转换为 HTML,并排除 “Calibri” 和 “Arial”(因为系统中已存在这些字体):
Presentation pres = new Presentation("pres.pptx");
try
{
// 排除默认演示文稿字体
String[] fontNameExcludeList = { "Calibri", "Arial" };
LinkAllFontsHtmlController linkcont = new LinkAllFontsHtmlController(fontNameExcludeList,"C:/Windows/Fonts/");
HtmlOptions htmlOptionsEmbed = new HtmlOptions();
htmlOptionsEmbed.setHtmlFormatter(HtmlFormatter.createCustomFormatter((IHtmlFormattingController) linkcont));
pres.save("pres.html", SaveFormat.Html, htmlOptionsEmbed);
}
finally {
if (pres != null) pres.dispose();
}
此 Java 代码演示 LinkAllFontsHtmlController 的实现方式:
public class LinkAllFontsHtmlController extends EmbedAllFontsHtmlController
{
private final String m_basePath;
public LinkAllFontsHtmlController(String[] fontNameExcludeList, String basePath)
{
super(fontNameExcludeList);
m_basePath = basePath;
}
public void writeFont
(
IHtmlGenerator generator,
IFontData originalFont,
IFontData substitutedFont,
String fontStyle,
String fontWeight,
byte[] fontData)
{
try {
String fontName = substitutedFont == null ? originalFont.getFontName() : substitutedFont.getFontName();
String path = fontName + ".woff"; // 可能需要对路径进行清理
Files.write(new File(m_basePath + path).toPath(), fontData, StandardOpenOption.CREATE);
generator.addHtml("<style>");
generator.addHtml("@font-face { ");
generator.addHtml("font-family: '" + fontName + "'; ");
generator.addHtml("src: url('" + path + "')");
generator.addHtml(" }");
generator.addHtml("</style>");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
将 PowerPoint 转换为响应式 HTML
此 Java 代码演示如何将 PowerPoint 演示文稿转换为响应式 HTML:
Presentation pres = new Presentation("SomePresentation.pptx");
try {
HtmlOptions saveOptions = new HtmlOptions();
saveOptions.setSvgResponsiveLayout(true);
pres.save("SomePresentation-out.html", SaveFormat.Html, saveOptions);
} finally {
if (pres != null) pres.dispose();
}
导出媒体文件为 HTML
使用 Aspose.Slides for Android via Java,您可以按以下方式导出媒体文件:
- 创建一个 [Presentation] 类的实例。
- 获取对幻灯片的引用。
- 向幻灯片添加视频。
- 将演示文稿写为 HTML 文件。
此 Java 代码演示如何向演示文稿添加视频并随后保存为 HTML:
// 加载演示文稿
Presentation pres = new Presentation();
try {
String path = "./out/";
final String fileName = "ExportMediaFiles_out.html";
final String baseUri = "http://www.example.com/";
byte[] videoData = Files.readAllBytes(Paths.get("my_video.avi"));
IVideo video = pres.getVideos().addVideo(videoData);
pres.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 100, 100, video);
VideoPlayerHtmlController controller = new VideoPlayerHtmlController(path, fileName, baseUri);
// 设置 HTML 选项
HtmlOptions htmlOptions = new HtmlOptions(controller);
SVGOptions svgOptions = new SVGOptions(controller);
htmlOptions.setHtmlFormatter(HtmlFormatter.createCustomFormatter(controller));
htmlOptions.setSlideImageFormat(SlideImageFormat.svg(svgOptions));
// 保存文件
pres.save(fileName, SaveFormat.Html, htmlOptions);
} catch(Exception e) {
} finally {
if (pres != null) pres.dispose();
}
常见问题
在将多个演示文稿转换为 HTML 时,Aspose.Slides 的性能如何?
性能取决于演示文稿的大小和复杂度。Aspose.Slides 对批量操作具有高效且可扩展的特性。为在转换大量演示文稿时获得最佳性能,建议尽可能使用多线程或并行处理。
Aspose.Slides 是否支持将超链接导出为 HTML?
是的,Aspose.Slides 完全支持将嵌入的超链接导出为 HTML。转换为 HTML 格式时,超链接会自动保留并保持可点击。
在将演示文稿转换为 HTML 时,是否对幻灯片数量有限制?
使用 Aspose.Slides 时,对幻灯片数量没有限制。您可以转换任意大小的演示文稿。不过,对于包含非常大量幻灯片的演示文稿,性能可能受服务器或系统可用资源的影响。
