From aab5d40f938ff6d3558eb8b45cb1824c05dad3d3 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Mon, 19 Oct 2026 09:36:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=B8=85=E7=90=86=E4=BB=A3=E7=A0=81):=20?= =?UTF-8?q?=E7=B2=BE=E7=AE=80=E5=BF=AB=E7=85=A7=E4=B8=8E=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/base/file/file.go | 6 ------ internal/webui/webui.go | 20 ++++++++++---------- ofdgo_compression.go | 8 +++++--- ofdgo_convert.go | 2 +- ofdgo_editor_annot_content.go | 4 ++-- ofdgo_editor_batch.go | 2 +- ofdgo_editor_composite.go | 2 +- ofdgo_editor_composite_copy.go | 3 ++- ofdgo_editor_documents.go | 2 +- ofdgo_editor_font_binding.go | 4 ++-- ofdgo_editor_group.go | 3 ++- ofdgo_editor_invoice.go | 16 ++++++++-------- ofdgo_editor_layer.go | 2 +- ofdgo_editor_resource.go | 8 ++++---- ofdgo_editor_resource_style.go | 2 +- ofdgo_editor_selection.go | 2 +- ofdgo_editor_structure_content.go | 6 +++--- ofdgo_editor_template.go | 7 ++++--- ofdgo_editor_transform.go | 3 ++- ofdgo_editor_versions.go | 6 +++--- ofdgo_editor_watermark.go | 2 +- ofdgo_invoice_layout.go | 4 ++-- ofdgo_invoice_source.go | 14 +++++++------- ofdgo_writer.go | 14 ++++---------- 24 files changed, 68 insertions(+), 74 deletions(-) diff --git a/internal/base/file/file.go b/internal/base/file/file.go index 2635ace..7ed4ae5 100644 --- a/internal/base/file/file.go +++ b/internal/base/file/file.go @@ -95,12 +95,6 @@ func NewTarget(name string) (*Target, error) { return &Target{name: name, info: info}, nil } -// Name 返回目标绝对路径 -// 返回: string 文件路径 -func (t *Target) Name() string { - return t.name -} - // check 检查目标是否保持最近确认的状态 // 返回: error 文件状态错误 func (t *Target) check() error { diff --git a/internal/webui/webui.go b/internal/webui/webui.go index 63b7af8..ba5272d 100644 --- a/internal/webui/webui.go +++ b/internal/webui/webui.go @@ -481,7 +481,7 @@ func (s *Session) Document(index int) (*Session, error) { reader := s.Reader if s.editor != nil { var err error - reader, err = s.editor.Reader() + reader, err = s.editor.Reader(context.Background()) if err != nil { return nil, err } @@ -519,7 +519,7 @@ func (s *Session) DocumentVersion(id string) (*Session, error) { reader := s.Reader if s.editor != nil { var err error - reader, err = s.editor.Reader() + reader, err = s.editor.Reader(context.Background()) if err != nil { return nil, err } @@ -1802,7 +1802,7 @@ func (e *businessEngine) documentInvoices(args []platformValue) (any, error) { // 返回: *ofdgo.Reader 当前读取器, func() 快照释放函数, error 快照错误 func (e *businessEngine) currentInvoiceReader() (*ofdgo.Reader, func(), error) { if e.currentEditor != nil { - r, err := e.currentEditor.Reader() + r, err := e.currentEditor.Reader(e.operationContext()) if err != nil { return nil, nil, err } @@ -2017,7 +2017,7 @@ func (e *businessEngine) validateInvoiceDraft(ctx context.Context, request invoi if source.Kind == "" { source = request.Source } - view, err := editor.ReaderContext(ctx) + view, err := editor.Reader(ctx) if err != nil { return nil, err } @@ -2204,7 +2204,7 @@ func (e *businessEngine) applyInvoiceBatch(ctx context.Context, editor *ofdgo.Ed } report, err := ofdgo.DecodeInvoices(ctx, data) if request.Source.Kind == "tag" && len(report.Invoices) == 0 { - view, viewErr := editor.ReaderContext(ctx) + view, viewErr := editor.Reader(ctx) if viewErr != nil { return result, viewErr } @@ -5764,7 +5764,7 @@ func (e *businessEngine) documentVersions(args []platformValue) (any, error) { reader := e.currentSession.Reader if e.currentEditor != nil { var err error - reader, err = e.currentEditor.Reader() + reader, err = e.currentEditor.Reader(e.operationContext()) if err != nil { return nil, err } @@ -6148,7 +6148,7 @@ func (e *businessEngine) exportVersion(args []platformValue) (any, error) { reader := e.currentSession.Reader if e.currentEditor != nil { var err error - reader, err = e.currentEditor.ReaderContext(ctx) + reader, err = e.currentEditor.Reader(ctx) if err != nil { return nil, err } @@ -6415,7 +6415,7 @@ func (e *businessEngine) syncEditorPageIDs(index int, content *ofdgo.PageContent // 入参: editor 编辑文档, annotations 是否显示注解 // 返回: editorInfo 文档信息, error 错误信息 func (e *businessEngine) previewEditor(editor *ofdgo.Editor, annotations bool) (editorInfo, error) { - reader, err := editor.Reader() + reader, err := editor.Reader(e.operationContext()) if err != nil { return editorInfo{}, err } @@ -7075,7 +7075,7 @@ func (e *businessEngine) previewSignatureSeal(args []platformValue) (any, error) if _, err := editor.AddPage(seal.Width, seal.Height); err != nil { return nil, err } - reader, err := editor.Reader() + reader, err := editor.Reader(e.operationContext()) if err != nil { return nil, err } @@ -7314,7 +7314,7 @@ func (e *businessEngine) saveEditor(editor *ofdgo.Editor, args []platformValue) ctx = e.newOutputContext(args[4]) } if len(args) > 2 && !args[2].IsNull() && !args[2].IsUndefined() { - _, err = editor.WritePagesToWithOptions(ctx, writer, e.indexesFromJS(args[2]), options) + _, err = editor.WritePagesTo(ctx, writer, e.indexesFromJS(args[2]), options) } else { _, err = editor.WriteToWithOptions(ctx, writer, options) } diff --git a/ofdgo_compression.go b/ofdgo_compression.go index aea51b5..4f78c45 100644 --- a/ofdgo_compression.go +++ b/ofdgo_compression.go @@ -102,10 +102,12 @@ func (e *Editor) WriteToWithOptions(ctx context.Context, writer io.Writer, optio return snapshot.WriteTo(convertWriter{ctx: ctx, writer: writer, count: &count}) } -// WritePagesToWithOptions 按指定顺序另存页面,仅为所选页面准备资源和压缩计划 +// WritePagesTo 按指定顺序另存页面,仅为所选页面准备资源和压缩计划 +// 保留关联资源、目录、注释和签章外观,生成新文档标识,不改变原文档和撤销记录 +// 签章外观不代表原签名在导出文档中仍有效,页码不可重复或为空 // 入参: ctx 取消上下文, writer 输出流, indexes 零基页码, options 输出配置 // 返回: int64 已写入字节数, error 错误信息 -func (e *Editor) WritePagesToWithOptions(ctx context.Context, writer io.Writer, indexes []int, options WriteOptions) (int64, error) { +func (e *Editor) WritePagesTo(ctx context.Context, writer io.Writer, indexes []int, options WriteOptions) (int64, error) { if err := ctx.Err(); err != nil { return 0, err } @@ -116,7 +118,7 @@ func (e *Editor) WritePagesToWithOptions(ctx context.Context, writer io.Writer, snapshot.OnWriteProgress = editorProgress(e.OnWriteProgress).withContext(ctx) snapshot.output = &outputOptimization{ctx: ctx, options: options.Compression} var count int64 - return snapshot.WritePagesTo(convertWriter{ctx: ctx, writer: writer, count: &count}, indexes) + return snapshot.writePagesTo(convertWriter{ctx: ctx, writer: writer, count: &count}, indexes) } // outputSnapshot 创建只读输出配置,原签名存在时仅调整ZIP封装 diff --git a/ofdgo_convert.go b/ofdgo_convert.go index 519cd61..f1e0fc5 100644 --- a/ofdgo_convert.go +++ b/ofdgo_convert.go @@ -310,7 +310,7 @@ func Convert(ctx context.Context, input *Input, output io.Writer, options Conver if options.Pages == nil { _, err = editor.WriteToWithOptions(ctx, writer, WriteOptions{Compression: options.Compression}) } else { - _, err = editor.WritePagesToWithOptions(ctx, writer, indices, WriteOptions{Compression: options.Compression}) + _, err = editor.WritePagesTo(ctx, writer, indices, WriteOptions{Compression: options.Compression}) } return report, err } diff --git a/ofdgo_editor_annot_content.go b/ofdgo_editor_annot_content.go index 8763a5e..9da8306 100644 --- a/ofdgo_editor_annot_content.go +++ b/ofdgo_editor_annot_content.go @@ -163,7 +163,7 @@ func (e *Editor) AnnotationTexts(index int, id string) ([]string, error) { if err != nil { return nil, err } - reader, err := e.Reader() + reader, err := e.reader(nil) if err != nil { return nil, err } @@ -548,7 +548,7 @@ func (e *Editor) annotationScope(page int, path ObjectPath) (*Reader, *Renderer, return nil, nil, nil, nil, err } root.setStates(e.source.annotationStates[e.pages[page].ID+"/"+editorResourceID(path.Annotation)]) - reader, err := e.Reader() + reader, err := e.reader(nil) if err != nil { return nil, nil, nil, nil, err } diff --git a/ofdgo_editor_batch.go b/ofdgo_editor_batch.go index 9cbc3d9..fd144f7 100644 --- a/ofdgo_editor_batch.go +++ b/ofdgo_editor_batch.go @@ -947,7 +947,7 @@ func (e *Editor) objectBounds(page int, objects []GraphicObject) ([]Box, error) return nil, fmt.Errorf("object %q cannot be arranged: %w", editorObjectID(object), capability.editError()) } } - reader, err := e.Reader() + reader, err := e.reader(nil) if err != nil { return nil, err } diff --git a/ofdgo_editor_composite.go b/ofdgo_editor_composite.go index 8edbfb1..6dc2fa4 100644 --- a/ofdgo_editor_composite.go +++ b/ofdgo_editor_composite.go @@ -419,7 +419,7 @@ func (e *Editor) compositeScope(page int, path ObjectPath) (*Reader, *Renderer, return nil, nil, nil, nil, err } root.setStates(object.CompositeGraphicUnit.states) - reader, err := e.Reader() + reader, err := e.reader(nil) if err != nil { return nil, nil, nil, nil, err } diff --git a/ofdgo_editor_composite_copy.go b/ofdgo_editor_composite_copy.go index 6b61137..be3fe47 100644 --- a/ofdgo_editor_composite_copy.go +++ b/ofdgo_editor_composite_copy.go @@ -16,6 +16,7 @@ package ofdgo import ( "bytes" + "encoding/xml" "fmt" basegeom "github.com/xiaoqidun/ofdgo/internal/base/geom" @@ -217,7 +218,7 @@ func (e *Editor) pasteCompositeSelection(selection *CompositeSelection, paste fu if err := e.prepareSourceIDs(); err != nil { return err } - reader, err := e.Reader() + reader, err := e.reader(nil) if err != nil { return err } diff --git a/ofdgo_editor_documents.go b/ofdgo_editor_documents.go index e64ddcb..f79c14d 100644 --- a/ofdgo_editor_documents.go +++ b/ofdgo_editor_documents.go @@ -155,7 +155,7 @@ func (e *Editor) AddDocumentContext(ctx context.Context, title string, width, he break } } - createdReader, err := created.ReaderContext(ctx) + createdReader, err := created.Reader(ctx) if err != nil { return 0, err } diff --git a/ofdgo_editor_font_binding.go b/ofdgo_editor_font_binding.go index c4f7868..493231d 100644 --- a/ofdgo_editor_font_binding.go +++ b/ofdgo_editor_font_binding.go @@ -102,7 +102,7 @@ func (e *Editor) changeFont(ctx context.Context, id string, mode FontMode, file if err := ctx.Err(); err != nil { return err } - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return err } @@ -156,7 +156,7 @@ func (e *Editor) ProcessFontsWithOptions(ctx context.Context, options FontProces if err := progress("prepare", 0, 0); err != nil { return nil, err } - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return nil, err } diff --git a/ofdgo_editor_group.go b/ofdgo_editor_group.go index a3a8f3e..7db3dbd 100644 --- a/ofdgo_editor_group.go +++ b/ofdgo_editor_group.go @@ -16,6 +16,7 @@ package ofdgo import ( "bytes" + "encoding/xml" "fmt" "maps" @@ -48,7 +49,7 @@ func (e *Editor) GroupObjects(page int, ids []string) (id string, err error) { return "", fmt.Errorf("grouping requires consecutive objects in the same container") } } - reader, err := e.Reader() + reader, err := e.reader(nil) if err != nil { return "", err } diff --git a/ofdgo_editor_invoice.go b/ofdgo_editor_invoice.go index aaf9564..479f437 100644 --- a/ofdgo_editor_invoice.go +++ b/ofdgo_editor_invoice.go @@ -205,7 +205,7 @@ func (r *Reader) InvoiceCapabilities(ctx context.Context, source InvoiceSource, func (e *Editor) GenerateInvoicePages(ctx context.Context, source InvoiceSource, index int, layout InvoiceLayout) error { ctx = invoiceWriteContext(ctx) return e.Transaction(func(next *Editor) error { - r, err := next.ReaderContext(ctx) + r, err := next.Reader(ctx) if err != nil { return err } @@ -252,7 +252,7 @@ func (e *Editor) InvoicesContext(ctx context.Context) (InvoiceReport, error) { if ctx == nil { ctx = context.Background() } - r, err := e.ReaderContext(ctx) + r, err := e.Reader(ctx) if err != nil { return InvoiceReport{}, err } @@ -374,7 +374,7 @@ func (e *Editor) UpdateInvoice(ctx context.Context, source InvoiceSource, digest return err } result = InvoiceUpdateResult{Source: updated, Digest: InvoiceDigest(actual), Synchronized: true} - r, err := next.ReaderContext(ctx) + r, err := next.Reader(ctx) if err != nil { return err } @@ -411,7 +411,7 @@ func (e *Editor) UpdateInvoice(ctx context.Context, source InvoiceSource, digest if err != nil { return err } - r, err := next.ReaderContext(ctx) + r, err := next.Reader(ctx) if err != nil { return err } @@ -611,7 +611,7 @@ func (e *Editor) DeleteInvoice(ctx context.Context, source InvoiceSource, digest ctx = context.Background() } return e.Transaction(func(next *Editor) error { - r, err := next.ReaderContext(ctx) + r, err := next.Reader(ctx) if err != nil { return err } @@ -830,7 +830,7 @@ func (e *Editor) SetInvoiceBindings(ctx context.Context, source InvoiceSource, i ctx = context.Background() } return e.Transaction(func(next *Editor) error { - r, err := next.ReaderContext(ctx) + r, err := next.Reader(ctx) if err != nil { return err } @@ -1190,7 +1190,7 @@ func invoiceBindingCoverage(before, after Invoice, bindings []InvoiceBinding) er // 入参: ctx 取消上下文, ids 页面标识 // 返回: []invoiceOwnedPage 按指定顺序排列的摘要, error 页面或读取错误 func (e *Editor) invoiceOwnedPages(ctx context.Context, ids []string) ([]invoiceOwnedPage, error) { - r, err := e.ReaderContext(ctx) + r, err := e.Reader(ctx) if err != nil { return nil, err } @@ -1233,7 +1233,7 @@ func (e *Editor) invoiceOwnedPages(ctx context.Context, ids []string) ([]invoice // 入参: ctx 取消上下文, source 来源, index 来源内发票索引, layout 排版选项 // 返回: error 关联或提交错误 func (e *Editor) markInvoicePages(ctx context.Context, source InvoiceSource, index int, layout InvoiceLayout) error { - r, err := e.ReaderContext(ctx) + r, err := e.Reader(ctx) if err != nil { return err } diff --git a/ofdgo_editor_layer.go b/ofdgo_editor_layer.go index 753bf1d..d89627d 100644 --- a/ofdgo_editor_layer.go +++ b/ofdgo_editor_layer.go @@ -331,7 +331,7 @@ func (e *Editor) editLayerPage(page int, edit func(*Reader, []byte, *editorXML) if _, err := e.page(page); err != nil { return err } - r, err := e.Reader() + r, err := e.reader(nil) if err != nil { return err } diff --git a/ofdgo_editor_resource.go b/ofdgo_editor_resource.go index e03b6e2..096c6da 100644 --- a/ofdgo_editor_resource.go +++ b/ofdgo_editor_resource.go @@ -53,7 +53,7 @@ type resourceImageMaskKey struct { // 入参: ctx 取消上下文 // 返回: []ResourceInfo 资源及引用位置, error 快照或结构错误 func (e *Editor) Resources(ctx context.Context) ([]ResourceInfo, error) { - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return nil, err } @@ -108,7 +108,7 @@ func (e *Editor) ImportMedia(ctx context.Context, kind, format string, data []by if kind != "Audio" && kind != "Video" || len(data) == 0 { return "", fmt.Errorf("nonempty Audio or Video resource required") } - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return "", err } @@ -237,7 +237,7 @@ func (e *Editor) DeleteResource(ctx context.Context, kind, id string) error { // 入参: ctx 取消上下文, kind 资源类型, id 标识, replace 替换操作,nil表示删除, data 附件替换数据 // 返回: error 引用、结构或提交错误 func (e *Editor) changeResource(ctx context.Context, kind, id string, replace func(*resourceCatalog, ResourceInfo, map[string][]byte) error, data []byte) error { - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return err } @@ -272,7 +272,7 @@ func (e *Editor) changeResource(ctx context.Context, kind, id string, replace fu if working.Revision() == revision { return ctx.Err() } - reader, err = working.ReaderContext(ctx) + reader, err = working.Reader(ctx) if err != nil { return err } diff --git a/ofdgo_editor_resource_style.go b/ofdgo_editor_resource_style.go index 5d855d2..a7a6d58 100644 --- a/ofdgo_editor_resource_style.go +++ b/ofdgo_editor_resource_style.go @@ -203,7 +203,7 @@ func (e *Editor) importResourceStyle(ctx context.Context, create func(*Editor) ( // 入参: ctx 取消上下文 // 返回: *Reader 包含待注册字体、颜色空间及参数依赖的独立快照, error 读取或隔离错误 func (e *Editor) resourceStyleReader(ctx context.Context) (*Reader, error) { - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil || len(e.resources) == 0 { return reader, err } diff --git a/ofdgo_editor_selection.go b/ofdgo_editor_selection.go index 5cf54da..ecd65d7 100644 --- a/ofdgo_editor_selection.go +++ b/ofdgo_editor_selection.go @@ -277,7 +277,7 @@ func (e *Editor) selectionGeometry(page int, objects, annotations []string) ([]B if err != nil { return nil, nil, Box{}, err } - reader, err := e.Reader() + reader, err := e.reader(nil) if err != nil { return nil, nil, Box{}, err } diff --git a/ofdgo_editor_structure_content.go b/ofdgo_editor_structure_content.go index 59849c5..907617f 100644 --- a/ofdgo_editor_structure_content.go +++ b/ofdgo_editor_structure_content.go @@ -27,7 +27,7 @@ import ( // Structure 获取当前编辑状态的标引,包括页面和图元删除后的引用调整 // 返回: []Structure 标引结构, error 快照或解析错误 func (e *Editor) Structure() ([]Structure, error) { - r, err := e.Reader() + r, err := e.reader(nil) if err != nil { return nil, err } @@ -397,7 +397,7 @@ func (e *Editor) editStructureContext(ctx context.Context, index int, edit func( } tag := tags[index] name := e.source.reader.ResPath(tag.FileLoc) - snapshot, err := e.ReaderContext(ctx) + snapshot, err := e.Reader(ctx) if err != nil { return err } @@ -532,7 +532,7 @@ func (e *Editor) validateStructureReferencesContext(ctx context.Context, root *S } if r == nil { var err error - r, err = e.ReaderContext(ctx) + r, err = e.Reader(ctx) if err != nil { return nil, err } diff --git a/ofdgo_editor_template.go b/ofdgo_editor_template.go index d2bb70d..f58db29 100644 --- a/ofdgo_editor_template.go +++ b/ofdgo_editor_template.go @@ -16,6 +16,7 @@ package ofdgo import ( "bytes" + "encoding/xml" "fmt" "path" @@ -201,7 +202,7 @@ func (e *Editor) CreateTemplateFromPage(page int, name, zOrder string) (string, if err := e.prepareSourceIDs(); err != nil { return err } - r, err := e.Reader() + r, err := e.reader(nil) if err != nil { return err } @@ -351,7 +352,7 @@ func (e *Editor) ReplaceTemplateFromPage(id string, page int) error { if err != nil { return err } - r, err := e.Reader() + r, err := e.reader(nil) if err != nil { return err } @@ -451,7 +452,7 @@ func editorTemplateDefinition(reader *Reader, id string) (TemplatePage, error) { // 返回: error 读取、修改或提交错误 func (e *Editor) editTemplateDefinition(id string, edit func(*Reader, []byte, *editorXML) ([]byte, error)) error { return e.Transaction(func(_ *Editor) error { - r, err := e.Reader() + r, err := e.reader(nil) if err != nil { return err } diff --git a/ofdgo_editor_transform.go b/ofdgo_editor_transform.go index 5fc944a..72da902 100644 --- a/ofdgo_editor_transform.go +++ b/ofdgo_editor_transform.go @@ -16,6 +16,7 @@ package ofdgo import ( "bytes" + "encoding/xml" "fmt" basegeom "github.com/xiaoqidun/ofdgo/internal/base/geom" @@ -329,7 +330,7 @@ func (e *Editor) transformMatrix(object GraphicObject, matrix Matrix) (GraphicOb return transformEditorMatrix(object, matrix), nil } origin := e.objectOrigin(object.ImageObject.ID) - reader, err := e.Reader() + reader, err := e.reader(nil) if err != nil { return GraphicObject{}, err } diff --git a/ofdgo_editor_versions.go b/ofdgo_editor_versions.go index 9b8528e..9209274 100644 --- a/ofdgo_editor_versions.go +++ b/ofdgo_editor_versions.go @@ -42,7 +42,7 @@ func (e *Editor) DocumentVersionsContext(ctx context.Context) ([]DocumentVersion if e.source == nil { return nil, nil } - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return nil, err } @@ -257,7 +257,7 @@ func (e *Editor) SetDefaultVersionContext(ctx context.Context, id string) error } return fmt.Errorf("document version not found: %s", id) } - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return err } @@ -314,7 +314,7 @@ func (e *Editor) RenameVersionContext(ctx context.Context, id, name string) erro if e.source == nil { return fmt.Errorf("document version not found: %s", id) } - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return err } diff --git a/ofdgo_editor_watermark.go b/ofdgo_editor_watermark.go index 94d61f1..b175326 100644 --- a/ofdgo_editor_watermark.go +++ b/ofdgo_editor_watermark.go @@ -101,7 +101,7 @@ func (e *Editor) AddWatermarks(ctx context.Context, indexes []int, object Graphi if err != nil { return nil, err } - reader, err := preview.Reader() + reader, err := preview.reader(nil) if err != nil { return nil, err } diff --git a/ofdgo_invoice_layout.go b/ofdgo_invoice_layout.go index 8f5f5fd..8eb1214 100644 --- a/ofdgo_invoice_layout.go +++ b/ofdgo_invoice_layout.go @@ -650,7 +650,7 @@ func (e *Editor) layoutInvoiceReferenceSlots(ctx context.Context, bindings []Inv if original.String() != before { return fmt.Errorf("invoice slot text changed") } - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return err } @@ -857,7 +857,7 @@ func invoiceCheckReflowReferences(ctx context.Context, e *Editor, ownedPageIDs [ } owned[key] = true } - reader, err := e.ReaderContext(ctx) + reader, err := e.Reader(ctx) if err != nil { return err } diff --git a/ofdgo_invoice_source.go b/ofdgo_invoice_source.go index f3667e1..92e97c7 100644 --- a/ofdgo_invoice_source.go +++ b/ofdgo_invoice_source.go @@ -242,7 +242,7 @@ func (e *Editor) ExportInvoice(ctx context.Context, source InvoiceSource) ([]byt if len(e.pages) == 0 { return e.source.reader.ExportInvoice(invoiceWriteContext(ctx), source) } - r, err := e.ReaderContext(invoiceWriteContext(ctx)) + r, err := e.Reader(invoiceWriteContext(ctx)) if err != nil { return nil, err } @@ -297,7 +297,7 @@ func (e *Editor) changeInvoiceSource(ctx context.Context, source InvoiceSource, return InvoiceSource{}, fmt.Errorf("invoice data limit exceeded") } if objectReference { - r, err := e.ReaderContext(ctx) + r, err := e.Reader(ctx) if err != nil { return InvoiceSource{}, err } @@ -526,7 +526,7 @@ func (e *Editor) importInvoiceReferences(ctx context.Context, data []byte, optio } var source InvoiceSource err := e.Transaction(func(next *Editor) error { - r, err := next.ReaderContext(ctx) + r, err := next.Reader(ctx) if err != nil { return err } @@ -546,7 +546,7 @@ func (e *Editor) importInvoiceReferences(ctx context.Context, data []byte, optio if err := next.editStructure(index, func(_ []byte, _ *editorXML, _ CustomTag) ([]byte, error) { return bytes.Clone(data), nil }); err != nil { return err } - r, err = next.ReaderContext(ctx) + r, err = next.Reader(ctx) if err != nil { return err } @@ -631,7 +631,7 @@ func (e *Editor) editInvoiceReferences(ctx context.Context, source InvoiceSource } var result InvoiceUpdateResult err := e.Transaction(func(next *Editor) error { - r, err := next.ReaderContext(ctx) + r, err := next.Reader(ctx) if err != nil { return err } @@ -786,7 +786,7 @@ func (e *Editor) editInvoiceReferences(ctx context.Context, source InvoiceSource if err := next.SyncInvoicePages(ctx, invoice, singles); err != nil { return err } - view, err := next.ReaderContext(ctx) + view, err := next.Reader(ctx) if err != nil { return err } @@ -865,7 +865,7 @@ func (e *Editor) setInvoiceReferences(ctx context.Context, source InvoiceSource, if index != 0 { return InvoiceUpdateResult{}, fmt.Errorf("invoice index out of range") } - r, err := e.ReaderContext(ctx) + r, err := e.Reader(ctx) if err != nil { return InvoiceUpdateResult{}, err } diff --git a/ofdgo_writer.go b/ofdgo_writer.go index d06ecd6..e351506 100644 --- a/ofdgo_writer.go +++ b/ofdgo_writer.go @@ -239,13 +239,13 @@ func (e *Editor) WriteTo(writer io.Writer) (int64, error) { return e.writePlaintext(writer) } -// WritePagesTo 按指定顺序将页面另存为独立OFD,不修改当前文档或撤销记录 +// writePagesTo 按指定顺序将页面另存为独立OFD,不修改当前文档或撤销记录 // 保留描述信息并生成新文档标识,迁移相关资源、目录、注释和签章外观,移除指向未选页面的跳转 // 快照只准备所选页面,关联引用由页面导入流程统一筛选,沿用当前后端及字体来源 // 签名凭据不代表另存文件验签有效;进度与取消复用OnWriteProgress,另含snapshot、ids和commit阶段 // 入参: writer 输出流, indexes 从0开始的页面索引,不可重复或为空 // 返回: int64 已写入字节数, error 错误信息 -func (e *Editor) WritePagesTo(writer io.Writer, indexes []int) (int64, error) { +func (e *Editor) writePagesTo(writer io.Writer, indexes []int) (int64, error) { ctx := context.Background() if e.output != nil { ctx = e.output.ctx @@ -307,16 +307,10 @@ func (e *Editor) WritePagesTo(writer io.Writer, indexes []int) (int64, error) { // Reader 获取当前文档的独立内存快照,不进行ZIP压缩,后续修改不影响已有快照 // 返回的Reader可用于现有渲染、搜索和导出接口,新增资源仅包含实际引用的部分,二进制数据内部共享只读 -// 返回: *Reader 阅读器, error 错误信息 -func (e *Editor) Reader() (*Reader, error) { - return e.reader(nil) -} - -// ReaderContext 获取可取消的独立内存快照,失败时不返回部分结果 -// 快照保持Reader的资源所有权规则,不改变当前编辑状态或撤销记录 +// 失败时不返回部分结果,不改变当前编辑状态或撤销记录 // 入参: ctx 取消上下文 // 返回: *Reader 阅读器, error 准备或取消错误 -func (e *Editor) ReaderContext(ctx context.Context) (*Reader, error) { +func (e *Editor) Reader(ctx context.Context) (*Reader, error) { return e.readerContext(ctx, nil) }