FreeCut:一个支持PDF自适应裁剪的PPT插件
需求分析
前不久,有朋友在 FreeHub 上许了个愿,想要一款 PPT 插件,实现对页面的快速裁剪导出。
大部分科研人都会用 PPT 来进行绘图,期刊会议往往对图像质量有较高要求,直接截图插入会导致图像不够清晰。
因此,专业做法是直接将 PPT 打印成 PDF,但用 PPT 自带的打印功能,存在两个问题:
- 无法对指定页面进行单独打印,一次性默认会打印所有页面
- 导出的页面没法直接插到论文里,因为周边往往存在冗余白边,需要用 DC 等PDF编辑工具进行二次裁剪
整理图片的过程是相对繁琐的,特别是当图片还比较多的情况下。
为了解决这个问题,我做了 FreeCut 这个PPT插件,它能够实现将几分钟才能实现的步骤压缩到几秒钟完成。
FreeCut 下载地址(windows):https://github.com/zstar1003/FreeCut/releases/download/v1.0.0/FreeCut_setup.zip
FreeCut 开源地址:https://github.com/zstar1003/FreeCut
使用方式
下载安装包之后,运行FreeCutInstaller.exe
打开安装器。
点击安装插件,会自动进行安装。
安装完后,打开PPT,可以看到 FreeCut 这个选项卡。
在设置界面中,可以进行以下参数的设置:
- 边距设置:用来调节裁剪之后的边距大小
- 自动检测设置:开启则自动检测边界并裁剪,关闭则导出原图;边界是通过像素颜色判断,确定内容的最大外接矩形,默认背景是白色背景,也可以修改为其它颜色
- 导出设置:DPI(每英寸点数)是衡量图像分辨率的单位,DPI越高文件分辨率越大,也越清晰,但文件体积会更高。
如果是白色背景的PPT,无需修改设置,可以直接点击待导出的页,然后点击导出PDF
。
导出的PDF会自动把多余的白边裁剪掉,可直接将其插入到论文中。
开发经验总结
这次需求不复杂,本以为用 AI 辅助能很快解决,但实际踩了不少坑,浪费了很多Tokens,这一节进行复盘总结。
PPT 插件开发方式
开发 PPT 插件主要有以下三种方式,如下表所示。
插件类型 | 主要技术 | 适用平台 | 示例功能 |
---|---|---|---|
Office Add-in(现代网页插件) | HTML + JS + Office.js | PowerPoint Web / Windows / Mac / iPad | AI 辅助排版、自动生成PPT内容、批量替换文字 |
VSTO 插件 | C# + .NET | Windows 桌面版 PowerPoint | 增加菜单按钮、操作幻灯片对象、读写文件 |
Python 自动化脚本 | python-pptx 库 | 无UI插件,命令行或Web端 | 批量生成、编辑幻灯片内容 |
这三种方式中,只有 VSTO 插件能够对幻灯片对象的完整访问能力,从而实现 PDF文件的导出,因此只能采用这条技术路线,在用AI辅助时,需要优先明确这一点,否则它会选取它更擅长的Office Add-in
这种方式。
VSTO 模板初始化
在选择完技术路线后,让AI放手去做,然而,它的对VSTO相关的知识是不足的,导致产生的内容无法被PPT正确加载。
因此,需要用 VS 去安装相关的工具集,并选择一套模板进行初始化,这样能够保证构建的 COM 加载项是正常的。
导出PDF的问题
导出PDF时,遇到了一个PDF文件尺寸异常的问题:图片显示范围和 PDF画布范围很难在不同 DPI 下均保持映射关系的准确,AI 一直在两个错误方案中反复横跳。
查阅相关资料,发现 .NET 中有个 2D 图形库 SkiaSharp 是个现成的工具,它支持生成矢量 PDF 文件,告诉 AI 这个信息之后,问题很快得到解决。