Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

自动生成书签功能增加按文本模式筛选标题 #16

Open
longriyao opened this issue Jan 5, 2022 · 15 comments
Open

自动生成书签功能增加按文本模式筛选标题 #16

longriyao opened this issue Jan 5, 2022 · 15 comments
Labels
❤️ 好建议 书签 生成或编辑导航书签 改进 New feature or request

Comments

@longriyao
Copy link

longriyao commented Jan 5, 2022

年报格式稳定,二三级目录识别相对具有可行性,现在支持一级目录识别,可以支持一下二三级目录识别吗?

@wmjordan
Copy link
Owner

wmjordan commented Jan 5, 2022

有样本文件吗?

@wmjordan wmjordan added the 讨论 Further information is requested label Jan 5, 2022
@longriyao
Copy link
Author

longriyao commented Jan 5, 2022

茅台股份2020年 年报 https://www.moutaichina.com/maotaigf/resource/cms/article/408431/509361/2021033108591131837.pdf 年报格式很标准,麻烦大佬看下!
这里有茅台其他年份的报告

@longriyao
Copy link
Author

@TroyDanielFZ
Copy link
Contributor

我看了一下,后面的这个使用PDFPatcher很好办啊,找几个标题右键添加就可以了。但是茅台那个不太好办,因为它的次级标题和其它内容比较混杂。

@wmjordan
Copy link
Owner

wmjordan commented Jan 5, 2022

对于类似茅台年报的文档,之前也有网友提议过,增加按文本模式(正则表达式)筛选内容的功能。

@wmjordan wmjordan added 改进 New feature or request and removed 讨论 Further information is requested labels Jan 5, 2022
@longriyao
Copy link
Author

longriyao commented Jan 5, 2022

简单实现的话 我觉得是不是可以

  1. 一级目录按照现有方法识别
  2. 确定是不是二三级目录,通过判断 是否粗体?是否只有一行?开始位置是否包含 特殊字符( 1-9,大写数字 小括号等字符)

@longriyao
Copy link
Author

我觉得这些简单的策略基本就满足大部分年报了 就可以了

@wmjordan
Copy link
Owner

wmjordan commented Jan 6, 2022

目前使用的组件(mupdf)有其功能局限性,例如无法判断“是否粗体”,也无法判断颜色之类的样式。

@longriyao
Copy link
Author

不能判断粗体确实挺伤的,如果能判断粗体就很容易了

@wmjordan wmjordan changed the title 大佬 能专门针对年报pdf加一个自动标签目录识别吗? 自动生成书签功能增加按文本模式筛选标题 Jan 6, 2022
@mokacao
Copy link

mokacao commented Jan 8, 2022

我用Foxit PDF Editor和mutools调试了下茅台年报的pdf,发现粗体文字有以下特征:
Foxit PDF Editor:
粗体:文本模式是填充然后笔画文本
普通:文本模式是填充文本
mutools:
粗体: pdf-interpret.c op_TJ
/* text showing */
case B('T','J'): if (proc->op_TJ) proc->op_TJ(ctx, proc, csi->obj); break;
普通: pdf-interpret.c op_rg
case B('r','g'): if (proc->op_rg) proc->op_rg(ctx, proc, s[0], s[1], s[2]); break;
查阅PDF Reference后,有如下描述和示例:
TJ: 正常使用Tj和其他字形绘制操作导致黑色填充字形被绘制。通过常规字形操作和结合字体操作可以获得其他效果。
rg:
0.0 1.0 0.0 rg % Set nonstroking color to green

基于以上分析,应该可以通过这2个op的区别来区分普通还是粗体。
@wmjordan

@wmjordan
Copy link
Owner

wmjordan commented Jan 8, 2022

@mokacao 非常感谢您的参与,但实际情况不是你上面所说的那样的。
我已经用 PDF 补丁丁的“文档结构探查器”来分析过那个文档。那个文档是通过描边线来实现粗体效果的。
image

我得再花一些时间来分析是否有可能用 MuPDF 来解析文档的渲染过程。它目前提供的结构文本接口并不够用,要更深入地介入渲染过程(可能要借助 device)来获取所需要的信息。

@wmjordan wmjordan pinned this issue Jan 8, 2022
@wmjordan wmjordan added 书签 生成或编辑导航书签 ❤️ 好建议 labels Jan 11, 2022
@wmjordan
Copy link
Owner

wmjordan commented May 8, 2022

各位朋友,PDF补丁丁今天有了一个新的测试版本。
它增强了自动生成书签的功能,针对字体尺寸相同的场合,允许通过匹配特定模式的标题来指定书签的级别。这个功能还不完善,后面还会继续优化。

先添加一个要自动生成书签的样式到自动生成书签列表,指定它的标题级别。
image

然后,选择“文本识别模式”中已定义好的标题样式。
image

再添加另一个自动生成书签的样式到自动生成书签列表,指定它的标题级别,然后,再选择“文本识别模式”中已定义好的标题样式。
image

请记得取消“合并相同字体尺寸的标题”选项

祝各位网友的母亲节日快乐!

@TroyDanielFZ
Copy link
Contributor

TroyDanielFZ commented May 8, 2022

哭求一个全部大写的条件。(其实更好的方法是提供一个自己可以输入正则的编辑框。)

祝所有母亲节日快乐!

@wmjordan
Copy link
Owner

wmjordan commented May 8, 2022

其实更好的方法是提供一个自己可以输入正则的编辑框

是的。有空再加上去。

@wmjordan
Copy link
Owner

wmjordan commented Feb 1, 2023

最新的测试版已经支持输入正则表达式,但是对于一行文本有多种不同字体的情况还不能完美地处理。
而这种情况又非常常见,需要继续生成书签文本的算法。

@wmjordan wmjordan unpinned this issue Apr 9, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
❤️ 好建议 书签 生成或编辑导航书签 改进 New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants