mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-08-30 12:12:40 +08:00
@@ -222,10 +222,6 @@ func (s *Session) Info() DocumentInfo {
|
|||||||
PageCount: len(s.doc.Pages.Page),
|
PageCount: len(s.doc.Pages.Page),
|
||||||
Pages: make([]PageInfo, 0, len(s.doc.Pages.Page)),
|
Pages: make([]PageInfo, 0, len(s.doc.Pages.Page)),
|
||||||
}
|
}
|
||||||
if fonts, err := s.Renderer.FontInfos(); err == nil {
|
|
||||||
info.Fonts = fonts
|
|
||||||
}
|
|
||||||
info.FontCount = len(info.Fonts)
|
|
||||||
if signatures, err := s.signatureInfos(); err == nil {
|
if signatures, err := s.signatureInfos(); err == nil {
|
||||||
info.Signatures = signatures
|
info.Signatures = signatures
|
||||||
} else {
|
} else {
|
||||||
@@ -239,9 +235,11 @@ func (s *Session) Info() DocumentInfo {
|
|||||||
info.CreationDate = docInfo.CreationDate
|
info.CreationDate = docInfo.CreationDate
|
||||||
info.ModDate = docInfo.ModDate
|
info.ModDate = docInfo.ModDate
|
||||||
}
|
}
|
||||||
|
pages := make([]*ofdgo.PageContent, 0, len(s.doc.Pages.Page))
|
||||||
for index, pageRef := range s.doc.Pages.Page {
|
for index, pageRef := range s.doc.Pages.Page {
|
||||||
pageInfo := PageInfo{Index: index, ID: pageRef.ID}
|
pageInfo := PageInfo{Index: index, ID: pageRef.ID}
|
||||||
if _, page, err := s.pageContent(index); err == nil {
|
if _, page, err := s.pageContent(index); err == nil {
|
||||||
|
pages = append(pages, page)
|
||||||
if box, err := s.pageBox(index, page); err == nil {
|
if box, err := s.pageBox(index, page); err == nil {
|
||||||
pageInfo.Width = box.W
|
pageInfo.Width = box.W
|
||||||
pageInfo.Height = box.H
|
pageInfo.Height = box.H
|
||||||
@@ -249,6 +247,10 @@ func (s *Session) Info() DocumentInfo {
|
|||||||
}
|
}
|
||||||
info.Pages = append(info.Pages, pageInfo)
|
info.Pages = append(info.Pages, pageInfo)
|
||||||
}
|
}
|
||||||
|
if fonts, err := s.Renderer.FontInfosFromPages(pages); err == nil {
|
||||||
|
info.Fonts = fonts
|
||||||
|
}
|
||||||
|
info.FontCount = len(info.Fonts)
|
||||||
return info
|
return info
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+45
-7
@@ -67,6 +67,30 @@ func (r *Reader) Fonts() ([]Font, error) {
|
|||||||
// FontInfos 获取OFD字体诊断信息
|
// FontInfos 获取OFD字体诊断信息
|
||||||
// 返回: []FontInfo 字体诊断列表, error 错误信息
|
// 返回: []FontInfo 字体诊断列表, error 错误信息
|
||||||
func (r *Renderer) FontInfos() ([]FontInfo, error) {
|
func (r *Renderer) FontInfos() ([]FontInfo, error) {
|
||||||
|
doc, err := r.fontInfoDocument()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return r.fontInfos(doc, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FontInfosFromPages 从页面内容获取OFD字体诊断信息
|
||||||
|
// 入参: pages 页面内容列表
|
||||||
|
// 返回: []FontInfo 字体诊断列表, error 错误信息
|
||||||
|
func (r *Renderer) FontInfosFromPages(pages []*PageContent) ([]FontInfo, error) {
|
||||||
|
doc, err := r.fontInfoDocument()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if pages == nil {
|
||||||
|
pages = []*PageContent{}
|
||||||
|
}
|
||||||
|
return r.fontInfos(doc, pages)
|
||||||
|
}
|
||||||
|
|
||||||
|
// fontInfoDocument 获取字体诊断文档结构
|
||||||
|
// 返回: *Document 文档结构, error 错误信息
|
||||||
|
func (r *Renderer) fontInfoDocument() (*Document, error) {
|
||||||
if r == nil || r.Reader == nil {
|
if r == nil || r.Reader == nil {
|
||||||
return nil, fmt.Errorf("ofd renderer is not initialized")
|
return nil, fmt.Errorf("ofd renderer is not initialized")
|
||||||
}
|
}
|
||||||
@@ -77,11 +101,18 @@ func (r *Renderer) FontInfos() ([]FontInfo, error) {
|
|||||||
if doc == nil {
|
if doc == nil {
|
||||||
return nil, fmt.Errorf("ofd document is not opened")
|
return nil, fmt.Errorf("ofd document is not opened")
|
||||||
}
|
}
|
||||||
|
return doc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// fontInfos 获取OFD字体诊断信息
|
||||||
|
// 入参: doc 文档结构, pages 页面内容列表
|
||||||
|
// 返回: []FontInfo 字体诊断列表, error 错误信息
|
||||||
|
func (r *Renderer) fontInfos(doc *Document, pages []*PageContent) ([]FontInfo, error) {
|
||||||
fonts, err := r.Reader.Fonts()
|
fonts, err := r.Reader.Fonts()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
usage := r.fontUsage(doc)
|
usage := r.fontUsage(doc, pages)
|
||||||
infos := make([]FontInfo, 0, len(fonts)+len(usage))
|
infos := make([]FontInfo, 0, len(fonts)+len(usage))
|
||||||
seen := make(map[string]bool)
|
seen := make(map[string]bool)
|
||||||
for _, font := range fonts {
|
for _, font := range fonts {
|
||||||
@@ -240,14 +271,21 @@ func fontFSMatchesStyle(fsys fs.FS, patterns []string, bold, italic bool) []stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fontUsage 统计文档字体使用次数
|
// fontUsage 统计文档字体使用次数
|
||||||
// 入参: doc 文档结构
|
// 入参: doc 文档结构, pages 页面内容列表, nil表示读取文档页面
|
||||||
// 返回: map[string]int 字体使用次数
|
// 返回: map[string]int 字体使用次数
|
||||||
func (r *Renderer) fontUsage(doc *Document) map[string]int {
|
func (r *Renderer) fontUsage(doc *Document, pages []*PageContent) map[string]int {
|
||||||
usage := make(map[string]int)
|
usage := make(map[string]int)
|
||||||
for _, pageRef := range doc.Pages.Page {
|
if pages == nil {
|
||||||
page, err := r.Reader.PageContent(pageRef)
|
for _, pageRef := range doc.Pages.Page {
|
||||||
if err == nil {
|
if page, err := r.Reader.PageContent(pageRef); err == nil {
|
||||||
r.countPageFonts(page, usage)
|
r.countPageFonts(page, usage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for _, page := range pages {
|
||||||
|
if page != nil {
|
||||||
|
r.countPageFonts(page, usage)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, tpl := range doc.CommonData.TemplatePage {
|
for _, tpl := range doc.CommonData.TemplatePage {
|
||||||
|
|||||||
Reference in New Issue
Block a user