PowGrade.FileConverters.PptxToPpt 0.1.0

dotnet add package PowGrade.FileConverters.PptxToPpt --version 0.1.0
                    
NuGet\Install-Package PowGrade.FileConverters.PptxToPpt -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.PptxToPpt" 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.PptxToPpt" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="PowGrade.FileConverters.PptxToPpt" />
                    
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.PptxToPpt --version 0.1.0
                    
#r "nuget: PowGrade.FileConverters.PptxToPpt, 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.PptxToPpt@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.PptxToPpt&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=PowGrade.FileConverters.PptxToPpt&version=0.1.0
                    
Install as a Cake Tool

PowGrade.FileConverters.PptxToPpt

.pptx 转换为 .ppt 的纯 .NET 实现,包含类库与 CLI 两种使用方式。

  • 目标框架:net8.0netstandard2.1
  • 运行依赖:PowGrade.FileConverters.Core(用于统一转换器接口)
  • 许可证:MIT

当前定位

项目已经具备“可用的兼容模板转换链路”,重点是让输出 .ppt 在传统环境中可见可打开,并优先保障:

  • 可见标题/正文文本
  • 单页图片模板可视化
  • 超过模板容量时的告警、报错、分片输出
  • CLI 批处理和报告输出

该项目不是“全保真 PPTX->PPT 渲染器”,而是“兼容模板驱动 + 自定义二进制载荷”的实现。

代码结构

src/
├─ PowGrade.FileConverters.PptxToPpt/
│  ├─ Cff/                # CFBF 容器写入
│  ├─ Conversion/         # 转换编排、溢出策略、批处理、报告
│  ├─ Ppt/                # PPT 记录构建 + 兼容模板写入
│  └─ Pptx/               # PPTX 解析(关系链、主题、媒体、注释等)
├─ PowGrade.FileConverters.PptxToPpt.Cli/
│  └─ Program.cs          # 命令行入口
└─ PowGrade.FileConverters.PptxToPpt.Tests/
   └─ *.cs                # 单元/集成/CLI/互操作测试

功能完成度评估

以下为基于源码与测试的完成度评估(164 个测试通过):

模块 完成度 说明
转换主流程(单文件) 85% 输入校验、输出写入、覆盖控制、可同步/异步调用
转换主流程(批处理) 80% 并发批转、跳过/失败统计、JSONL 批次事件、可重试失败识别
PPTX 关系解析 80% 支持 slide/layout/master/theme、notes、comments、chart/diagram 关系载入
可见文本提取 75% 占位符继承、正文聚合、注释合并、段落级项目符号与部分编号
图像处理 70% 关系图像提取、单页图片模板变体匹配、几何有效性检查
图形对象映射 60% sp/grpSp/cxnSp/pic/graphicFrame 基本转换,包含位移/旋转/缩放字段
图表/表格/SmartArt 40% 以“文本提取”方式降级,不是结构化对象保真渲染
兼容输出策略 90% 5 页容量限制、warn/error/split、分片命名与报告完善
CLI 85% 参数较完整,错误提示清晰,支持目录输入
测试体系 85% 覆盖广;互操作测试在无 Office 环境下自动跳过

已实现能力

  • 读取 PPTX 关系图并解析:
    • 幻灯片、版式、母版、主题
    • 图片媒体
    • 备注页、批注作者
    • 图表/SmartArt 相关 XML(用于文本提取)
  • 构建 PPT 输出时支持:
    • 文本段落与 run 级样式(字体、字号、粗斜体、下划线、颜色)
    • 基础项目符号与有限自动编号前缀
    • 形状/组合/连接线基础记录及变换字段写入
    • 图片关系嵌入和可见图槽映射
  • 兼容容量策略:
    • 模板可见容量上限 5 页
    • warn(告警截断)/error(直接失败)/split(分片输出)
    • 分片输出支持文本或 JSONL 报告
  • CLI 参数:
    • --comment-merge
    • --overflow
    • --split-name
    • --split-pad
    • --split-size
    • --split-report
    • --split-report-file
    • --batch-concurrency
    • --batch-retries
    • --batch-retry-delay-ms

缺失与不完整功能

1) 保真度相关(核心差距)

  • 不是全保真 PPT 渲染:
    • 图表、表格、SmartArt 目前主要是提取可见文本,非结构保真对象
    • 动画、切换、音视频、OLE、宏、批注气泡样式等未实现
  • 图形语义不完整:
    • 仅写入基础几何/变换字段,复杂填充、描边、路径、效果支持不足
  • 母版/版式继承为“文本可见优先”策略,非完整版式复刻

2) 工程化与产品化差距

  • CLI 对通配符字符串本身不做解析(依赖 shell 展开或目录遍历)
  • 批处理已支持并发与重试参数,但尚缺少更细粒度的“按错误类型策略化重试”

改进计划(建议优先级)

P0(必须)

  1. 修正 RepositoryUrl 与发布元数据,避免包信息误导
  2. 将测试项目纳入解决方案,保证 dotnet test 一键覆盖
  3. 在 README 与 CLI 帮助中明确“兼容模板容量=5 页”和降级策略
  4. 增加回归基线:典型中文/图像/分片场景的 golden 文件校验

P1(高价值)

  1. 提升图表/表格/SmartArt 从“文本降级”到“结构化映射”
  2. 完善图形属性:填充、线型、透明度、路径与部分效果
  3. 批处理增强:并发度参数、失败重试策略、汇总报告字段扩展
  4. 增加性能基准(大文件、多文件、内存占用)

P2(中长期)

  1. 动画/切换的近似映射
  2. 媒体与 OLE 能力增强
  3. 密码保护文档的检测与处理策略
  4. 更完整的 Office 互操作验证矩阵

CLI 使用

# 单文件转换
dotnet run --project src/PowGrade.FileConverters.PptxToPpt.Cli -- input.pptx

# 指定输出目录并覆盖
dotnet run --project src/PowGrade.FileConverters.PptxToPpt.Cli -- -o out -f input.pptx

# 目录批量转换(递归查找 *.pptx)
dotnet run --project src/PowGrade.FileConverters.PptxToPpt.Cli -- D:\pptx-folder

# 超过模板容量时分片输出
dotnet run --project src/PowGrade.FileConverters.PptxToPpt.Cli -- --overflow split --split-size 3 input.pptx

# 输出 JSONL 分片报告
dotnet run --project src/PowGrade.FileConverters.PptxToPpt.Cli -- --overflow split --split-report jsonl --split-report-file reports\split.jsonl input.pptx

# 批处理并发与重试(需要配合 -o 指定统一输出目录)
dotnet run --project src/PowGrade.FileConverters.PptxToPpt.Cli -- -o out --batch-concurrency 4 --batch-retries 2 --batch-retry-delay-ms 150 D:\pptx-folder

代码调用示例

using PowGrade.FileConverters.PptxToPpt.Conversion;

var converter = new Converter();
converter.Convert(
    inputPath: "demo.pptx",
    outputPath: "demo.ppt",
    overwrite: true,
    compatibilityOverflowMode: CompatibilityOverflowMode.Split,
    splitOutputChunkSize: 5);

构建与测试

# 构建类库 + CLI(当前 slnx 仅包含这两个项目)
dotnet build src/PowGrade.FileConverters.PptxToPpt.slnx

# 运行测试(需要显式指定测试项目)
dotnet test src/PowGrade.FileConverters.PptxToPpt.Tests/PowGrade.FileConverters.PptxToPpt.Tests.csproj

已知限制

  • 可见模板容量默认 5 页(可通过 split 输出多个 ppt)
  • 优先保障“可打开、可见文本、可见图片”,非全要素保真
  • 在无 Office 环境下,互操作相关测试会跳过
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 (1)

Showing the top 1 NuGet packages that depend on PowGrade.FileConverters.PptxToPpt:

Package Downloads
PowGrade.FileConverters.PptxToPpt.Cli

PPTX to PPT converter CLI

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 149 4/30/2026