PDFPatcher icon indicating copy to clipboard operation
PDFPatcher copied to clipboard

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

Open longriyao opened this issue 3 years ago • 15 comments

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

longriyao avatar Jan 05 '22 06:01 longriyao

有样本文件吗?

wmjordan avatar Jan 05 '22 06:01 wmjordan

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

longriyao avatar Jan 05 '22 12:01 longriyao

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

TroyDanielFZ avatar Jan 05 '22 12:01 TroyDanielFZ

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

wmjordan avatar Jan 05 '22 12:01 wmjordan

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

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

longriyao avatar Jan 05 '22 12:01 longriyao

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

longriyao avatar Jan 05 '22 12:01 longriyao

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

wmjordan avatar Jan 06 '22 00:01 wmjordan

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

longriyao avatar Jan 06 '22 02:01 longriyao

我用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

mokacao avatar Jan 08 '22 03:01 mokacao

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

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

wmjordan avatar Jan 08 '22 12:01 wmjordan

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

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

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

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

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

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

wmjordan avatar May 08 '22 03:05 wmjordan

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

祝所有母亲节日快乐!

TroyDanielFZ avatar May 08 '22 08:05 TroyDanielFZ

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

是的。有空再加上去。

wmjordan avatar May 08 '22 08:05 wmjordan

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

wmjordan avatar Feb 01 '23 09:02 wmjordan