feat(字体路径): 优化回退字体路径

This commit is contained in:
2026-02-28 10:57:51 +08:00
parent d72614b5b8
commit 50fa73c218
3 changed files with 47 additions and 36 deletions
+9 -8
View File
@@ -36,6 +36,7 @@ type Reader struct {
compositeGraphicUnitCache map[string]*CompositeGraphicUnit
doc *Document
Stamps map[string][]Stamp
fileIndex map[string]*zip.File
}
// Close 关闭阅读器
@@ -50,6 +51,10 @@ func (r *Reader) Close() error {
// initRoot 读取根节点信息
// 返回: error 错误信息
func (r *Reader) initRoot() error {
r.fileIndex = make(map[string]*zip.File)
for _, f := range r.Zip.File {
r.fileIndex[f.Name] = f
}
data, err := r.readFile("OFD.xml")
if err != nil {
return fmt.Errorf("failed to read ofd.xml: %w", err)
@@ -72,10 +77,8 @@ func (r *Reader) initRoot() error {
func (r *Reader) readFile(name string) ([]byte, error) {
name = strings.ReplaceAll(name, "\\", "/")
name = strings.TrimPrefix(name, "/")
for _, f := range r.Zip.File {
if f.Name == name {
return readZipFile(f)
}
if f, ok := r.fileIndex[name]; ok {
return readZipFile(f)
}
return nil, fmt.Errorf("file not found: %s", name)
}
@@ -86,10 +89,8 @@ func (r *Reader) readFile(name string) ([]byte, error) {
func (r *Reader) openFile(name string) (io.ReadCloser, error) {
name = strings.ReplaceAll(name, "\\", "/")
name = strings.TrimPrefix(name, "/")
for _, f := range r.Zip.File {
if f.Name == name {
return f.Open()
}
if f, ok := r.fileIndex[name]; ok {
return f.Open()
}
return nil, fmt.Errorf("file not found: %s", name)
}