Documentation
¶
Overview ¶
Package merge 提供 OFD 文档的合并能力。
ZIP 级合并只重写 OFD.xml 与签名文件中的包内路径,把每个输入文档体 (DocBody)的目录树原样搬运到新的 Doc_N 目录,不解析或重写页面、资源 等内部 XML,因此改动最小、资源 ID 不需要重映射。被引用文件的字节保持 不变,签名摘要仍然有效;但签名值(SignedValue)本身覆盖了签名清单,重写 路径后需要重新签名。签名处理方式由 Options.Signatures 控制。
模型级合并(Pages)把多个文档体的页面解析为 creator 模型后重新生成一个 单文档 OFD,支持跨文档拼页,但需要重新编号文档级资源;页面级资源冲突会由 创建器报错。
Index ¶
- func Bytes(documents [][]byte, w io.Writer, options Options) error
- func Files(paths []string, w io.Writer, options Options) error
- func Marshal(paths []string, options Options) ([]byte, error)
- func Pages(inputs []Source, w io.Writer, options PageOptions) error
- func ParsePages(spec string) ([]int, error)
- func Sources(inputs []Source, w io.Writer, options Options) error
- type Limits
- type Options
- type OrphanMode
- type PageLimits
- type PageOptions
- type PageSelector
- type SignatureAction
- type SignatureEvent
- type SignatureStatus
- type Source
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Files ¶
Files 将 paths 指向的每个 OFD 文档体合并为一个多文档 OFD 包并写入 w。 输入文件按需读取、输出条目流式写入 w,适合较大的文档;即使只有一个输入 也会被重新打包为规范的多文档结构。
func Pages ¶
func Pages(inputs []Source, w io.Writer, options PageOptions) error
Pages 把 inputs 中每个文档体的页面合并成一个单文档 OFD 并写入 w。
与 ZIP 级合并不同,模型级合并会把各源解析为 creator 模型后重新生成, 因此文档级资源(字体名、绘制参数名、图片/颜色空间/复合图元/模板 ID)会被 重新命名或编号,并同步改写引用。页面级资源保持原样,若跨源发生冲突会由 创建器报错。签名和版本不会保留;大纲、书签、动作和页面注解会保留,并按其 来源与最终页序重写跳转页索引,目标页未被保留的动作或注解会被丢弃。
func ParsePages ¶
ParsePages 解析 "1,3-5" 形式的全局页码表达式,返回从 1 开始的页序。
Types ¶
type Options ¶
type Options struct {
// Compression 是输出 ZIP 的压缩策略,空值时使用 creator.CompressionAuto。
Compression creator.CompressionMode
// CompressionLevel 是 DEFLATE 压缩级别,0 使用默认级别 5,显式范围
// 1(最快)到 9(最紧凑)。仅对实际使用 Deflate 的条目生效。
CompressionLevel int
// Deterministic 使用固定 ZIP 时间,生成可复现的合并结果。
Deterministic bool
// Signatures 是签名处理方式,空值时使用 archive.SignaturePreserve。
Signatures creator.SignatureMode
// Orphans 是文档目录之外条目的处理方式,空值时使用 OrphanError。
Orphans OrphanMode
// Limits 限制合并输入的规模,零值使用默认限制。
Limits Limits
// OnWarning 可选,接收合并过程中的非致命提示,例如签名被重写后签名值失效。
OnWarning func(string)
// OnSignature 可选,接收每个输入签名的处理结果。
OnSignature func(SignatureEvent)
}
Options 控制 ZIP 级合并的输出方式。
type OrphanMode ¶
type OrphanMode string
OrphanMode 控制文档目录之外的条目如何处理。
const ( // OrphanError 在存在文档目录之外的条目时返回错误。空值等同于此模式。 OrphanError OrphanMode = "error" // OrphanIgnore 跳过文档目录之外的条目。 OrphanIgnore OrphanMode = "ignore" // OrphanPreserve 把文档目录之外的条目按原路径保留到输出包根目录。 OrphanPreserve OrphanMode = "preserve" )
type PageLimits ¶
type PageLimits struct {
// MaxInputBytes 是单个输入 OFD 的最大字节数,0 表示默认 512MB。
MaxInputBytes int64
// MaxTotalBytes 是所有输入 OFD 的总字节数上限,0 表示默认 1GB。
MaxTotalBytes int64
// MaxPages 是输出合并文档的最大页数,0 表示默认 100000。
MaxPages int
}
PageLimits 限制模型级合并的输入规模。
type PageOptions ¶
type PageOptions struct {
// Compression 是输出 ZIP 的压缩策略,空值时使用 creator.CompressionAuto。
Compression creator.CompressionMode
// CompressionLevel 是 DEFLATE 压缩级别,0 使用默认级别 5,显式范围
// 1(最快)到 9(最紧凑)。仅对实际使用 Deflate 的条目生效。
CompressionLevel int
// Deterministic 使用固定 ZIP 时间,生成可复现的合并结果。
Deterministic bool
// Pages 指定输出页序,元素为按输入顺序拼接后的 1 起始全局页码;为空时输出
// 全部页面。允许重复与重排,越界会返回错误。与 Selectors 互斥。
Pages []int
// Selectors 按来源选页,元素为 1 起始的来源序号与该来源内 1 起始的页码;
// Source 为 0 表示全局页序。与 Pages 互斥。
Selectors []PageSelector
// Limits 限制输入字节数与输出页数,零值使用默认限制。
Limits PageLimits
// Concurrency 是并行解析/转换输入的并发数,0 表示默认 4,1 表示串行。
Concurrency int
// OnSignature 可选,接收每个输入签名在模型级合并中被丢弃的结果。
OnSignature func(SignatureEvent)
// ID、Title、Author、Subject 可选覆盖输出文档元数据;为空时沿用首个来源。
ID string
Title string
Author string
Subject string
}
PageOptions 控制模型级页面合并的输出方式。
type PageSelector ¶
PageSelector 选择某个来源的页面。Source 是 1 起始的输入序号,0 表示全局页序; Pages 是 1 起始的页码,Source 非 0 时相对该来源的第一页,为空表示该来源全部页面。
func ParsePageSelection ¶
func ParsePageSelection(spec string) ([]PageSelector, error)
ParsePageSelection 解析选页表达式,支持全局页序与按来源选择:
"1,3-5" 全局页序(拼接后从 1 开始) "s1:1,3-5;s2:2" 第 1 个输入的第 1、3、4、5 页,再第 2 个输入的第 2 页
来源序号从 1 开始,按输入(`-i`/位置参数)顺序编号;空串返回空选择。
type SignatureAction ¶
type SignatureAction string
SignatureAction 描述合并过程对某个签名采取的动作。
const ( // SignaturePreserved 表示签名文件字节原样保留。 SignaturePreserved SignatureAction = "preserved" // SignatureRewritten 表示签名文件中的包内路径被重写,签名值会失效。 SignatureRewritten SignatureAction = "rewritten" // SignatureDropped 表示签名被丢弃。 SignatureDropped SignatureAction = "dropped" )
type SignatureEvent ¶
type SignatureEvent struct {
// Input 是来源名称,文件输入时为路径。
Input string
// DocumentIndex 是文档体索引,从 0 开始。
DocumentIndex int
// ID 是签名标识或签名文件路径。
ID string
// Action 是对该签名的处理动作。
Action SignatureAction
}
SignatureEvent 描述某个输入签名的处理结果。
type SignatureStatus ¶
type SignatureStatus struct {
// ID 是签名标识。
ID string
// DigestValid 表示签名引用与数据摘要校验通过。
DigestValid bool
// Verified 表示 SM2/SES 密码学签名验证通过。
Verified bool
// VerificationError 是密码学验证的错误信息。
VerificationError string
}
SignatureStatus 描述输出文档中一个签名的校验状态。
func VerifySignatures ¶
func VerifySignatures(input any) ([]SignatureStatus, error)
VerifySignatures 解析 OFD 并汇总每个签名的摘要与密码学验证状态。 input 支持文件路径、字节数据或 io.Reader。