mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 01:27:26 +08:00
1 parent
d7e9604282
commit
225f60919b
6 files changed
+30
-30
No files matched your search
@@ -63,7 +63,7 @@ func (e *Editor) CaptureAnnotations(page int, ids []string) (*AnnotationSelectio
|
|||||||
if e.originalPage(page) {
|
if e.originalPage(page) {
|
||||||
origin := e.source.pages[e.pages[page].ID]
|
origin := e.source.pages[e.pages[page].ID]
|
||||||
for _, name := range content.PageRes {
|
for _, name := range content.PageRes {
|
||||||
selection.resources = append(selection.resources, e.source.reader.ResPath(resolveResourcePath(origin.ref.BaseLoc, "", name)))
|
selection.resources = append(selection.resources, resolveResourcePath(e.source.reader.ResPath(origin.ref.BaseLoc), "", name))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return selection, nil
|
return selection, nil
|
||||||
|
|||||||
@@ -857,17 +857,16 @@ func (m *editorPageImport) documentReference(group, kind, source, id, loc string
|
|||||||
return nil, fmt.Errorf("missing %s reference %q", kind, source)
|
return nil, fmt.Errorf("missing %s reference %q", kind, source)
|
||||||
}
|
}
|
||||||
|
|
||||||
// resolve 按所在XML解析包内路径,兼容阅读器接受的文档相对路径
|
// resolve 按所在XML和资源基准目录解析包内路径
|
||||||
// 入参: name 所在XML, base 资源目录, value 路径值
|
// 入参: name 所在XML, base 资源目录, value 路径值
|
||||||
// 返回: string 包内路径, error 错误信息
|
// 返回: string 包内路径, error 错误信息
|
||||||
func (m *editorPageImport) resolve(name, base, value string) (string, error) {
|
func (m *editorPageImport) resolve(name, base, value string) (string, error) {
|
||||||
for _, candidate := range []string{resolveResourcePath(name, base, value), m.reader.ResPath(value)} {
|
candidate := resolveResourcePath(name, base, value)
|
||||||
if m.reader.files[candidate] != nil {
|
if _, ok := m.reader.files[candidate]; ok {
|
||||||
return candidate, nil
|
return candidate, nil
|
||||||
}
|
}
|
||||||
if file, ok := m.reader.packageFile(candidate); ok {
|
if file, ok := m.reader.packageFile(candidate); ok {
|
||||||
return cleanPackagePath(file.Name), nil
|
return cleanPackagePath(file.Name), nil
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return "", fmt.Errorf("import reference %q in %s not found", value, name)
|
return "", fmt.Errorf("import reference %q in %s not found", value, name)
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-8
@@ -213,17 +213,19 @@ func pruneCreatedPageReferences(data []byte, removed map[string]bool) ([]byte, e
|
|||||||
return editorPatchXML(data, patches), nil
|
return editorPatchXML(data, patches), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// editorPageLocation 解析标准XML引用,优先使用所在文件的相对路径
|
// editorPageLocation 按所在XML解析引用,绝对路径以包根目录为基准
|
||||||
// 入参: reader 原包, parts 覆盖条目, name 所在XML, value 路径
|
// 入参: reader 原包, parts 覆盖条目, name 所在XML, value 路径
|
||||||
// 返回: string 包内路径, error 路径不存在
|
// 返回: string 包内路径, error 路径不存在
|
||||||
func editorPageLocation(reader *Reader, parts map[string][]byte, name, value string) (string, error) {
|
func editorPageLocation(reader *Reader, parts map[string][]byte, name, value string) (string, error) {
|
||||||
for _, candidate := range []string{resolveResourcePath(name, "", value), reader.ResPath(value)} {
|
candidate := resolveResourcePath(name, "", value)
|
||||||
if _, ok := parts[candidate]; ok || reader.files[candidate] != nil {
|
if _, ok := parts[candidate]; ok {
|
||||||
return candidate, nil
|
return candidate, nil
|
||||||
}
|
}
|
||||||
if file, ok := reader.packageFile(candidate); ok {
|
if _, ok := reader.files[candidate]; ok {
|
||||||
return cleanPackagePath(file.Name), nil
|
return candidate, nil
|
||||||
}
|
}
|
||||||
|
if file, ok := reader.packageFile(candidate); ok {
|
||||||
|
return cleanPackagePath(file.Name), nil
|
||||||
}
|
}
|
||||||
return "", fmt.Errorf("page reference %q in %s not found", value, name)
|
return "", fmt.Errorf("page reference %q in %s not found", value, name)
|
||||||
}
|
}
|
||||||
+9
-10
@@ -282,7 +282,7 @@ func (r *Reader) PageArea(page Page) (PageArea, error) {
|
|||||||
return r.resolvePageArea(content.Area, content.Template)
|
return r.resolvePageArea(content.Area, content.Template)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResPath 获取资源的完整路径
|
// ResPath 按当前文档目录解析ST_Loc,包内绝对路径以根目录为基准
|
||||||
// 入参: resLink 资源链接
|
// 入参: resLink 资源链接
|
||||||
// 返回: string 完整路径
|
// 返回: string 完整路径
|
||||||
func (r *Reader) ResPath(resLink string) string {
|
func (r *Reader) ResPath(resLink string) string {
|
||||||
@@ -299,10 +299,7 @@ func (r *Reader) ResPath(resLink string) string {
|
|||||||
}
|
}
|
||||||
resLink = path.Clean(resLink)
|
resLink = path.Clean(resLink)
|
||||||
rootDir := strings.TrimPrefix(strings.ReplaceAll(r.RootDir, "\\", "/"), "/")
|
rootDir := strings.TrimPrefix(strings.ReplaceAll(r.RootDir, "\\", "/"), "/")
|
||||||
if rootDir != "" && (resLink == rootDir || strings.HasPrefix(resLink, rootDir+"/")) {
|
return cleanPackagePath(path.Join(rootDir, resLink))
|
||||||
return resLink
|
|
||||||
}
|
|
||||||
return cleanPackagePath(path.Join(r.RootDir, resLink))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResData 获取资源文件数据
|
// ResData 获取资源文件数据
|
||||||
@@ -443,6 +440,7 @@ func (r *Reader) AttachmentData(id string) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CustomTags 获取自定义标引
|
// CustomTags 获取自定义标引
|
||||||
|
// 返回的文件路径可直接传入ResData读取
|
||||||
// 返回: []CustomTag 自定义标引列表, error 错误信息
|
// 返回: []CustomTag 自定义标引列表, error 错误信息
|
||||||
func (r *Reader) CustomTags() ([]CustomTag, error) {
|
func (r *Reader) CustomTags() ([]CustomTag, error) {
|
||||||
doc, err := r.Doc()
|
doc, err := r.Doc()
|
||||||
@@ -457,8 +455,8 @@ func (r *Reader) CustomTags() ([]CustomTag, error) {
|
|||||||
}
|
}
|
||||||
for i := range customTags.CustomTag {
|
for i := range customTags.CustomTag {
|
||||||
tag := &customTags.CustomTag[i]
|
tag := &customTags.CustomTag[i]
|
||||||
tag.SchemaLoc = resolveResourcePath(partPath, "", tag.SchemaLoc)
|
tag.SchemaLoc = r.resourceLocation(partPath, "", tag.SchemaLoc)
|
||||||
tag.FileLoc = resolveResourcePath(partPath, "", tag.FileLoc)
|
tag.FileLoc = r.resourceLocation(partPath, "", tag.FileLoc)
|
||||||
}
|
}
|
||||||
if customTags.CustomTag == nil {
|
if customTags.CustomTag == nil {
|
||||||
customTags.CustomTag = []CustomTag{}
|
customTags.CustomTag = []CustomTag{}
|
||||||
@@ -482,6 +480,7 @@ func (r *Reader) CustomDatas() ([]CustomData, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Extensions 获取扩展项
|
// Extensions 获取扩展项
|
||||||
|
// 返回的文件路径可直接传入ResData读取
|
||||||
// 返回: []Extension 扩展项列表, error 错误信息
|
// 返回: []Extension 扩展项列表, error 错误信息
|
||||||
func (r *Reader) Extensions() ([]Extension, error) {
|
func (r *Reader) Extensions() ([]Extension, error) {
|
||||||
doc, err := r.Doc()
|
doc, err := r.Doc()
|
||||||
@@ -497,7 +496,7 @@ func (r *Reader) Extensions() ([]Extension, error) {
|
|||||||
for i := range extensions.Extension {
|
for i := range extensions.Extension {
|
||||||
extension := &extensions.Extension[i]
|
extension := &extensions.Extension[i]
|
||||||
for j := range extension.ExtendData {
|
for j := range extension.ExtendData {
|
||||||
extension.ExtendData[j] = resolveResourcePath(partPath, "", extension.ExtendData[j])
|
extension.ExtendData[j] = r.resourceLocation(partPath, "", extension.ExtendData[j])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if extensions.Extension == nil {
|
if extensions.Extension == nil {
|
||||||
@@ -866,7 +865,7 @@ func (r *Reader) readPageContent(page Page, textOnly, template bool) (*PageConte
|
|||||||
content.Template = nil
|
content.Template = nil
|
||||||
}
|
}
|
||||||
for _, res := range content.PageRes {
|
for _, res := range content.PageRes {
|
||||||
r.loadRes(resolveResourcePath(page.BaseLoc, "", res))
|
r.loadRes("/" + resolveResourcePath(fullPath, "", res))
|
||||||
}
|
}
|
||||||
content.Area, err = r.resolvePageArea(content.Area, content.Template)
|
content.Area, err = r.resolvePageArea(content.Area, content.Template)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -883,7 +882,7 @@ func (r *Reader) loadPageResources(page Page) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, res := range header.PageRes {
|
for _, res := range header.PageRes {
|
||||||
r.loadRes(resolveResourcePath(page.BaseLoc, "", res))
|
r.loadRes("/" + resolveResourcePath(r.ResPath(page.BaseLoc), "", res))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -200,13 +200,13 @@ func (r *Reader) parseSignatures(doc *Document) error {
|
|||||||
var sealData []byte
|
var sealData []byte
|
||||||
if sigFile.SignedInfo.Seal.BaseLoc != "" {
|
if sigFile.SignedInfo.Seal.BaseLoc != "" {
|
||||||
sealPath := resolveResourcePath(sigPath, "", sigFile.SignedInfo.Seal.BaseLoc)
|
sealPath := resolveResourcePath(sigPath, "", sigFile.SignedInfo.Seal.BaseLoc)
|
||||||
if data, err := r.ResData(sealPath); err == nil {
|
if data, err := r.readFile(sealPath); err == nil {
|
||||||
sealType, sealData = extractSeal(data)
|
sealType, sealData = extractSeal(data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(sealData) == 0 && sigFile.SignedValue != "" {
|
if len(sealData) == 0 && sigFile.SignedValue != "" {
|
||||||
signedValuePath := resolveResourcePath(sigPath, "", sigFile.SignedValue)
|
signedValuePath := resolveResourcePath(sigPath, "", sigFile.SignedValue)
|
||||||
if data, err := r.ResData(signedValuePath); err == nil {
|
if data, err := r.readFile(signedValuePath); err == nil {
|
||||||
if sig, err := parseSESSignature(data); err == nil {
|
if sig, err := parseSESSignature(data); err == nil {
|
||||||
sealType, sealData = sig.Seal.PicType, sig.Seal.PicData
|
sealType, sealData = sig.Seal.PicType, sig.Seal.PicData
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+1
-1
@@ -555,7 +555,7 @@ func (e *Editor) usedResources() (fonts, images []editorResource, spaces []Color
|
|||||||
}
|
}
|
||||||
if origin := e.objectOrigin(editorObjectID(object)); origin != nil && origin.page != nil && (!exists || before.Type != object.Type || !reflect.DeepEqual(before.CompositeGraphicUnit, object.CompositeGraphicUnit)) {
|
if origin := e.objectOrigin(editorObjectID(object)); origin != nil && origin.page != nil && (!exists || before.Type != object.Type || !reflect.DeepEqual(before.CompositeGraphicUnit, object.CompositeGraphicUnit)) {
|
||||||
for _, name := range origin.page.original.PageRes {
|
for _, name := range origin.page.original.PageRes {
|
||||||
files[e.source.reader.ResPath(resolveResourcePath(origin.page.ref.BaseLoc, "", name))] = true
|
files[resolveResourcePath(e.source.reader.ResPath(origin.page.ref.BaseLoc), "", name)] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user