feat(编辑能力): 修复选页另存取消延迟
build.yaml / build (push) Successful in 37s

This commit is contained in:
xiaoqidun committed 2026-09-17 09:57:07 +08:00
1 parent 4487fbd55a
commit 13eced8dd8
11 files changed
+450 -126

No files matched your search

+38 -2
View File
@@ -86,21 +86,57 @@ func (e *Editor) WriteTo(writer io.Writer) (int64, error) {
return output.count, err
}
// WritePagesTo 按指定顺序将页面另存为独立OFD,不修改当前文档或撤销记录
// 保留描述信息并生成新文档标识,迁移相关资源、目录、注释和签章外观,移除指向未选页面的跳转
// 签名凭据不代表另存文件验签有效;进度与取消复用OnWriteProgress,另含snapshot、ids和commit阶段
// 入参: writer 输出流, indexes 从0开始的页面索引,不可重复或为空
// 返回: int64 已写入字节数, error 错误信息
func (e *Editor) WritePagesTo(writer io.Writer, indexes []int) (int64, error) {
if len(indexes) == 0 {
return 0, fmt.Errorf("no pages selected")
}
progress := editorProgress(e.OnWriteProgress)
if err := progress.report("snapshot", 0, 0); err != nil {
return 0, err
}
reader, err := e.reader(progress)
if err != nil {
return 0, err
}
defer reader.Close()
selected := NewEditor()
id := selected.Info.DocID
selected.Info = cloneEditorData(e.Info)
selected.Info.DocID = id
selected.OnWriteProgress = e.OnWriteProgress
if _, err := selected.ImportPagesWithOptions(reader, indexes, 0, PageImportOptions{Outlines: true, OnProgress: e.OnWriteProgress}); err != nil {
return 0, err
}
return selected.WriteTo(writer)
}
// Reader 获取当前文档的独立内存快照,不进行ZIP压缩,后续修改不影响已有快照
// 返回的Reader可用于现有渲染、搜索和导出接口,新增资源仅包含实际引用的部分,二进制数据内部共享只读
// 返回: *Reader 阅读器, error 错误信息
func (e *Editor) Reader() (*Reader, error) {
return e.reader(nil)
}
// reader 生成内存快照,保存时复用准备进度,预览时不触发回调
// 入参: progress 准备进度回调
// 返回: *Reader 阅读器, error 错误信息
func (e *Editor) reader(progress editorProgress) (*Reader, error) {
if err := e.validate(); err != nil {
return nil, err
}
if e.source != nil {
return e.sourceReader()
return e.sourceReader(progress)
}
r := &Reader{files: make(map[string][]byte)}
if err := e.writeParts(func(name string, data []byte, _ bool) error {
r.files[name] = data
return nil
}, nil); err != nil {
}, progress); err != nil {
return nil, err
}
if err := r.initRoot(); err != nil {