在Java中将PowerPoint转换为PDF

概述

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

PowerPoint到PDF的转换

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

  • PPT
  • PPTX
  • ODP

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

Aspose.Slides允许您转换:

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

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

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

将PowerPoint转换为PDF

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

以下Java代码显示了如何将PowerPoint转换为PDF:

// 实例化一个表示PowerPoint文件的Presentation类
Presentation pres = new Presentation("PowerPoint.ppt");
try {
    // 将演示文稿保存为PDF
    pres.save("PPT-to-PDF.pdf", SaveFormat.Pdf);
} finally {
    if (pres != null) pres.dispose();
}

使用选项将PowerPoint转换为PDF

Aspose.Slides提供自定义选项——PdfOptions类下的属性——允许您自定义PDF(源自转换过程的结果),用密码锁定PDF,甚至指定转换过程的方式。

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

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

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

// 实例化PdfOptions类
PdfOptions pdfOptions = new PdfOptions();

// 设置JPG图像的质量
pdfOptions.setJpegQuality((byte)90);

// 设置图像的DPI
pdfOptions.setSufficientResolution(300);

// 设置元文件的行为
pdfOptions.setSaveMetafilesAsPng(true);

// 设置文本内容的压缩等级
pdfOptions.setTextCompression(PdfTextCompression.Flate);

// 定义PDF合规模式
pdfOptions.setCompliance(PdfCompliance.Pdf15);

// 实例化一个表示PowerPoint文档的Presentation类
Presentation presentation = new Presentation("PowerPoint.pptx");
try {
    // 保存演示文稿为PDF文档
    presentation.save("PowerPoint-to-PDF.pdf", SaveFormat.Pdf, pdfOptions);
} finally {
    presentation.dispose();
}

包含隐藏幻灯片将PowerPoint转换为PDF

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

以下Java代码显示了如何将PowerPoint演示文稿转换为PDF,同时包含隐藏幻灯片:

// 实例化一个表示PowerPoint文件的Presentation类
Presentation pres = new Presentation("PowerPoint.pptx");
try {
    // 实例化PdfOptions类
    PdfOptions pdfOptions = new PdfOptions();
    
    // 添加隐藏幻灯片
    pdfOptions.setShowHiddenSlides(true);
    
    // 保存演示文稿为PDF
    pres.save("PowerPoint-to-PDF.pdf", SaveFormat.Pdf, pdfOptions);
} finally {
    if (pres != null) pres.dispose();
}

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

以下Java代码显示了如何将PowerPoint转换为带密码保护的PDF(使用来自PdfOptions类的保护参数):

// 实例化一个表示PowerPoint文件的Presentation对象
Presentation pres = new Presentation("PowerPoint.pptx");
try {
    // 实例化PdfOptions类
    PdfOptions pdfOptions = new PdfOptions();
    
    // 设置PDF密码和访问权限
    pdfOptions.setPassword("password");
    pdfOptions.setAccessPermissions(PdfAccessPermissions.PrintDocument | PdfAccessPermissions.HighQualityPrint);
    
    // 保存演示文稿为PDF
    pres.save("PPTX-to-PDF.pdf", SaveFormat.Pdf, pdfOptions);
} finally {
    if (pres != null) pres.dispose();
}

检测字体替换

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

以下Java代码显示了如何检测字体替换:

public void main(String[] args)
{
    LoadOptions loadOptions = new LoadOptions();
    FontSubstSendsWarningCallback warningCallback = new FontSubstSendsWarningCallback();
    loadOptions.setWarningCallback(warningCallback);

    Presentation pres = new Presentation("pres.pptx", loadOptions);
    try {
        
    } finally {
        if (pres != null) pres.dispose();
    }
}

private class FontSubstSendsWarningCallback implements IWarningCallback
{
    public int warning(IWarningInfo warning)
    {
        if (warning.getWarningType() == WarningType.CompatibilityIssue)
            return ReturnAction.Continue;

        if (warning.getWarningType() == WarningType.DataLoss &&
                warning.getDescription().startsWith("Font will be substituted"))
        {
            System.out.println("字体替换警告: " + warning.getDescription());
        }

        return ReturnAction.Continue;
    }
}

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

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

// 实例化一个表示PowerPoint文件的Presentation对象
Presentation pres = new Presentation("PowerPoint.pptx");
try {
    // 设置幻灯片的位置数组
    int[] slides = { 1, 3 };
    
    // 保存演示文稿为PDF
    pres.save("PPTX-to-PDF.pdf", slides, SaveFormat.Pdf);
} finally {
    if (pres != null) pres.dispose();
}

将PowerPoint转换为具有自定义幻灯片大小的PDF

以下Java代码显示了如何将指定幻灯片大小的PowerPoint转换为PDF:

// 实例化一个表示PowerPoint文件的Presentation对象 
Presentation pres = new Presentation("SelectedSlides.pptx");
try {
    Presentation outPres = new Presentation();
    try {
        ISlide slide = pres.getSlides().get_Item(0);

        outPres.getSlides().insertClone(0, slide);
        
        // 设置幻灯片类型和大小 
        outPres.getSlideSize().setSize(612F, 792F, SlideSizeScaleType.EnsureFit);
        
        PdfOptions pdfOptions = new PdfOptions();
        INotesCommentsLayoutingOptions options = pdfOptions.getNotesCommentsLayouting();
        options.setNotesPosition(NotesPositions.BottomFull);

        outPres.save("PDFnotes_out.pdf", SaveFormat.Pdf, pdfOptions);
    } finally {
        if (pres != null) pres.dispose();
    }
} finally {
    if (pres != null) pres.dispose();
}

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

以下Java代码显示了如何将PowerPoint转换为PDF备注:

// 实例化一个表示PowerPoint文件的Presentation类
Presentation pres = new Presentation("SelectedSlides.pptx");
try {
    PdfOptions pdfOptions = new PdfOptions();
    INotesCommentsLayoutingOptions options = pdfOptions.getNotesCommentsLayouting();
    options.setNotesPosition(NotesPositions.BottomFull);

    pres.save("Pdf_With_Notes.pdf", SaveFormat.Pdf, pdfOptions);
} finally {
    if (pres != null) pres.dispose();
}

PDF的无障碍和合规标准

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

以下Java代码演示了在将PowerPoint转换为PDF的操作中,基于不同合规标准获取多个PDF:

Presentation pres = new Presentation("pres.pptx");
try {
    PdfOptions pdfOptions = new PdfOptions();
    
    pdfOptions.setCompliance(PdfCompliance.PdfA1a);
    pres.save("pres-a1a-compliance.pdf", SaveFormat.Pdf, pdfOptions);

    pdfOptions.setCompliance(PdfCompliance.PdfA1b);
    pres.save("pres-a1b-compliance.pdf", SaveFormat.Pdf, pdfOptions);

    pdfOptions.setCompliance(PdfCompliance.PdfUa);
    pres.save("pres-ua-compliance.pdf", SaveFormat.Pdf, pdfOptions);
} finally {
    if (pres != null) pres.dispose();
}