mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-08-30 12:12:40 +08:00
feat(电子发票): 兼容飞猪OFD机票
This commit is contained in:
+35
-18
@@ -157,30 +157,15 @@ func (r *Reader) loadRes(resPath string) {
|
||||
baseLoc := res.BaseLoc
|
||||
for _, mm := range res.MultiMedias.MultiMedia {
|
||||
if mm.MediaFile != "" {
|
||||
p := strings.TrimSpace(mm.MediaFile)
|
||||
if p == "" {
|
||||
continue
|
||||
if finalPath := resolveResourcePath(resPath, baseLoc, mm.MediaFile); finalPath != "" {
|
||||
r.ResMap[mm.ID] = finalPath
|
||||
}
|
||||
dir := path.Dir(resPath)
|
||||
if baseLoc != "" {
|
||||
if dir != baseLoc {
|
||||
dir = path.Join(dir, baseLoc)
|
||||
}
|
||||
}
|
||||
finalPath := path.Join(dir, p)
|
||||
r.ResMap[mm.ID] = finalPath
|
||||
}
|
||||
}
|
||||
for i := range res.Fonts.Font {
|
||||
f := &res.Fonts.Font[i]
|
||||
if f.FontFile != "" {
|
||||
dir := path.Dir(resPath)
|
||||
if baseLoc != "" {
|
||||
if dir != baseLoc {
|
||||
dir = path.Join(dir, baseLoc)
|
||||
}
|
||||
}
|
||||
f.FontFile = path.Join(dir, f.FontFile)
|
||||
f.FontFile = resolveResourcePath(resPath, baseLoc, f.FontFile)
|
||||
}
|
||||
r.fontCache[f.ID] = f
|
||||
}
|
||||
@@ -194,6 +179,27 @@ func (r *Reader) loadRes(resPath string) {
|
||||
}
|
||||
}
|
||||
|
||||
// resolveResourcePath 解析资源文件路径
|
||||
// 入参: resPath 资源文件路径, baseLoc 资源基准路径, filePath 文件路径
|
||||
// 返回: string 资源文件路径
|
||||
func resolveResourcePath(resPath, baseLoc, filePath string) string {
|
||||
p := strings.TrimSpace(filePath)
|
||||
if p == "" {
|
||||
return ""
|
||||
}
|
||||
p = strings.ReplaceAll(p, "\\", "/")
|
||||
if strings.HasPrefix(p, "/") {
|
||||
return strings.TrimPrefix(path.Clean(p), "/")
|
||||
}
|
||||
dir := path.Dir(resPath)
|
||||
if baseLoc != "" {
|
||||
if dir != baseLoc {
|
||||
dir = path.Join(dir, baseLoc)
|
||||
}
|
||||
}
|
||||
return path.Join(dir, p)
|
||||
}
|
||||
|
||||
// PageContent 获取页面内容
|
||||
// 入参: page 页面对象
|
||||
// 返回: *PageContent 页面内容, error 错误信息
|
||||
@@ -218,6 +224,17 @@ func (r *Reader) ResPath(resLink string) string {
|
||||
if resLink == "" {
|
||||
return ""
|
||||
}
|
||||
resLink = strings.ReplaceAll(resLink, "\\", "/")
|
||||
resLink = strings.TrimSpace(resLink)
|
||||
if resLink == "" {
|
||||
return ""
|
||||
}
|
||||
resLink = strings.TrimPrefix(resLink, "/")
|
||||
resLink = path.Clean(resLink)
|
||||
rootDir := strings.TrimPrefix(strings.ReplaceAll(r.RootDir, "\\", "/"), "/")
|
||||
if rootDir != "" && (resLink == rootDir || strings.HasPrefix(resLink, rootDir+"/")) {
|
||||
return resLink
|
||||
}
|
||||
return path.Join(r.RootDir, resLink)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user