aardio 文档

PPTX 有限编辑与安全另存

fsys.openXml.pptx.editor 在 0.6.0 提供文本替换、页序调整、同类型图片替换,以及显式动画/切换替换。不需要 Office/WPS;使用系统 MSXML 与公共 ZIP 读写库。

0.11.0 增加同文稿复制/删除页面、保留格式的矩形表格填值,以及横向/纵向/矩形合并。快速用法及限制见 模板与数据。不包含跨文稿母版导入、图表创建或近似预览。

跨文本运行替换

import fsys.openXml.pptx.editor;
var doc,err=fsys.openXml.pptx.editor.open("/input.pptx");
if(!doc) return null,err;
var count,err=doc.replaceText("{{Name}}","新名称",{includeNotes=true});
if(count===null){doc.close();return null,err;}
var path,err=doc.save("/edited.pptx");
doc.close();
if(!path) return null,err;
return {path=path;count=count};

搜索为大小写敏感字面字符串。可匹配被拆在同段落相邻 a:r/a:t 内的占位符,替换文字继承第一个命中运行的格式,未命中部分保留原运行格式。不会把整段文字扁平化重写。

页序、形状与动画

import fsys.openXml.pptx.editor;
var doc,err=fsys.openXml.pptx.editor.open("/input.pptx");
if(!doc) return null,err;
var slides,err=doc.listSlides();
if(!slides){doc.close();return null,err;}
var order=[];
for(i=#slides,1,-1) table.push(order,i);
var ok,err=doc.reorderSlides(order);
if(!ok){doc.close();return null,err;}
var path,err=doc.save("/reordered.pptx");
doc.close();
return path,err;

reorderSlides(order) 要求全部页号恰好出现一次,仅改主文档 sldIdLst,不删除、复制页面或清理孤儿媒体;现有备注、动画、图片关系仍关联原页面。

listSlides() 返回 index,id,partName,relationshipId;listShapes(page) 返回 id,name,kind,text,hasText,按 XML 形状树及分组递归顺序,不是视觉排序。

setAnimations(page,effects,replaceExisting=false) 使用 生成器动画 的相同描述。若原页已有时间轴,默认报错;明确传 true 才完整替换。[] 清空,不尝试合并未知时间轴或保留部分特效。

setTransition(page,options,replaceExisting=false) 同理,null 清空;新的切换写在 timing 之前。对于同时含其他内容的 AlternateContent,若其中含 transition,完整替换该块。两项写入只支持 Transitional;Strict 文档可以文本/页序编辑,但拒绝混入 Transitional 动画节点。

图片替换

replaceImage(page,target,dataOrPath) 以图片 id 或唯一 name 选择图片,替换其现有内部媒体部件。只接受与原部件相同的 PNG/JPEG 类型,并检查可解码;不访问外链图片、不调整裁剪和位置。

返回 {partName,sharedPart=true}。同一媒体部件被其他页/形状引用时,它们也会改变;本接口不是“仅替换这一张形状”的自动克隆。0.11.0 的 copySlide 会为新页独立复制已支持的图片/图表/工作簿依赖,与原页隔离;但副本内部多个形状仍可共用一份媒体。单张图片的自动拆分、图表数据编辑仍不在 replaceImage 的范围内。

保存与保留

低层包替换见 fsys.openXml.editor。fsys.openXml.pptx.edit 与技能 editPptx 为便捷入口。

Markdown 格式