PowGrade.FileConverters.PptToPptx 0.1.0

dotnet add package PowGrade.FileConverters.PptToPptx --version 0.1.0
                    
NuGet\Install-Package PowGrade.FileConverters.PptToPptx -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PowGrade.FileConverters.PptToPptx" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PowGrade.FileConverters.PptToPptx" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="PowGrade.FileConverters.PptToPptx" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PowGrade.FileConverters.PptToPptx --version 0.1.0
                    
#r "nuget: PowGrade.FileConverters.PptToPptx, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PowGrade.FileConverters.PptToPptx@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PowGrade.FileConverters.PptToPptx&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=PowGrade.FileConverters.PptToPptx&version=0.1.0
                    
Install as a Cake Tool

PowGrade.FileConverters.PptToPptx

将 PowerPoint 97-2003 二进制格式(.ppt)转换为 OpenXML(.pptx / .pptm)的 .NET 库与 CLI 工具。

项目组成

  • src/PowGrade.FileConverters.PptToPptx:核心转换库(net8.0;netstandard2.1)
  • src/PowGrade.FileConverters.PptToPptx.Cli:命令行工具(ppt2pptx)
  • tests/PowGrade.FileConverters.PptToPptx.Tests:xUnit 测试集

当前完成度(基于代码与测试现状)

说明:以下是“工程可用性”视角,不是“与 Office 完全像素级一致性”视角。

能力域 完成度 现状
基础转换主流程(读 .ppt → 写 .pptx) 90% 主链路稳定,支持同步/异步、超时、取消、进度、结果统计
文本与段落 70% 常规文本可用;高级排版(复杂项目符号、细粒度字距/特效)不完整
图片与形状 70% 常见图像与基础形状可用;复杂 Escher 属性、3D、部分几何映射不足
超链接 75% 文本/形状链接与动作链接可导出;无效目标和边缘场景仍存在降级
图表 65% 可解析常见图表与系列;复杂格式与兼容细节仍有限
表格 45% 以启发式重建为主,合并单元格/复杂边框保真较弱
动画与切换 40% 基础动画/过渡可导出;复杂时序、路径、触发链路有明显缺口
OLE / 嵌入媒体 50% 具备提取与打包;媒体播放行为与 OLE 可编辑行为保真不足
VBA 宏打包 60% 可携带 vbaProject.bin 并输出 .pptm;宏语义兼容不保证
SmartArt 65% 已有原生 diagram part 写出与回退策略;复杂布局仍会差异
批量转换与报告 80% 顺序/并行批量可用;批量报告细节字段完整性可继续增强
工程质量(自动化验证) 85% 测试覆盖广(dotnet test 当前 492/492 通过),但仍有较多编译警告

已实现能力

  • 无需 Office Interop,直接解析 OLE Compound File 与 PPT 记录流
  • 支持文件与流输入输出(同步/异步)
  • 支持 ConversionOptions:超时、大小限制、页数限制、图片数限制、编码覆盖、进度回调
  • 支持 ConversionResult:耗时、页数、资源计数、告警、异常信息
  • 支持批量转换(顺序与并行)
  • 支持 CLI 子命令:
    • convert:单文件转换
    • batch:目录/批量转换
    • validate:输入文件检测
    • preset:预设查看
    • info:能力说明

已知限制

以下限制在运行结果中通常会以 warning 形式体现:

  • 动画:复杂时序、路径和高级触发不保证可逆
  • 评论:回复线程不会完整导出
  • OLE/媒体:部分仅保留 payload,缺少可播放/可编辑关系绑定
  • SmartArt:复杂布局仍可能走 fallback,编辑保真受限
  • 字体:嵌入字体与主题字体方案的映射仍有边界
  • 空安全:当前代码存在较多 nullable 警告,需要逐步清理

快速开始

环境要求

  • .NET SDK 8.0+

构建与测试

dotnet build PowGrade.FileConverters.PptToPptx.sln
dotnet test PowGrade.FileConverters.PptToPptx.sln

库用法

using PowGrade.FileConverters.PptToPptx;

var options = new ConversionOptions
{
    KeepTempFiles = false,
    MaxSlideCount = 1000,
    Timeout = TimeSpan.FromMinutes(10)
};

PptToPptxConverter.Convert(
    @"C:\input\legacy.ppt",
    @"C:\output\converted.pptx",
    options);

如输入包含 VBA,建议输出为 .pptm:

PptToPptxConverter.Convert(
    @"C:\input\legacy.ppt",
    @"C:\output\converted.pptm");

CLI 用法

在项目目录执行:

dotnet run --project src/PowGrade.FileConverters.PptToPptx.Cli -- convert --input in.ppt --output out.pptx

批量转换:

dotnet run --project src/PowGrade.FileConverters.PptToPptx.Cli -- batch --input-dir ./in --output-dir ./out --pattern *.ppt

生成转换报告:

dotnet run --project src/PowGrade.FileConverters.PptToPptx.Cli -- convert --input in.ppt --output out.pptx --report report.txt

查看命令帮助:

dotnet run --project src/PowGrade.FileConverters.PptToPptx.Cli -- --help
dotnet run --project src/PowGrade.FileConverters.PptToPptx.Cli -- convert --help

架构概览

  • PptReader:解析 OLE 与 PPT 二进制记录,构建中间模型 Presentation
  • PptxWriter:将中间模型写入 OpenXML 包结构([Content_Types].xml、ppt/slides/*.xml、rels 等)
  • Features/*:动画、注释、超链接、媒体、OLE、主题、SmartArt 等增强模块
  • Pipeline/*:提供可组合中间件管道能力(日志、校验、重试、缓存等)
  • TemplateEngine:文本报告渲染(单文件/批量)

依赖与集成

  • 依赖 PowGrade.FileConverters.Core(注册适配器 PptToPptxFileConverter)
  • 可通过 ServiceCollectionExtensions 注入 IPptToPptxConverter 与 IBatchConverter

改进路线(建议优先级)

  1. 清理 nullable 警告并补齐关键空值防护
  2. 提升表格保真(合并单元格、边框、填充)
  3. 扩展动画映射(触发/时序/路径)
  4. 完善媒体与 OLE 的 shape 绑定和播放行为映射
  5. 强化字体与主题联动,减少 fallback
  6. 继续扩大真实样本回归集并收敛告警噪音

许可证

MIT License,详见 LICENSE。

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 155 4/30/2026