An example of the type of pdf I'm trying to scrape. 我正在试着从pdf文档中找出论文的数量,其中的论文名称使用特定的字体和大小(10px).

鉴于pdf的其他元素包含的单词不是论文名称,但字体和大小相同,我的解决方案是通过判断文本中是否至少有一个连字符来计算论文的数量.然而,由于某种原因,pdf2txt.py更改了pdf上文本的第三行中的文本大小,这使我无法计算纸张.

在附图中,这发生在页面底部,其中"大学-流动性溢出...市场"的字体大小为9,而其余文本的字体大小为10.

为什么要这样做,如何防止pdfminer随意更改文本大小?

这是我在命令行中用来转换为html的代码.

pdf2txt.py -o output.html -t html input.pdf

推荐答案

如果使用OCR或HTML转换为PDF,两者的行为不同,但输出相似,这并不重要.同样,在反向工作时也存在大致相同的问题.据我所知,从样例中,PDFMiner被硬编码为一个固定的比例进行转换,但大多数文档不是以这种方式固定的.

如果源不是以 scanner 像素(像素)等点定义的,则需要将它们四舍五入为PDF单位,通常可以将其描述为最接近的点.大小

如果没有要测试的PDF,这里是对该区域的不同解释,因此顶线被视为四舍五入为16点.(实际标量单位=66.6984),绿色和蓝色线条为17点.(实际标量单位=70.8671)和17点.(不变)

enter image description here

因此,为了在转换中帮助识别,源单位应首先调整为最近的1/2点(最接近的10 TWIPS)

回答

虽然不是确切的原因(没有要测试的输入和输出),但它是常见的.

报告的磅大小是指示性的,通常由读者(16和17)四舍五入,因为PDF不使用点,而是可变标量单位(这里是66.6984和70.8671).

因为不存在行来自同一来源的概念,所以每一连续的行可以是不同的高度,甚至可以包含高度波动的文本(对于数学公式来说是可取的).

为了控制输出高度,理想情况下,它们应该按行定义为源中的"点高度".

Pdfminer should convert a 10 pt object to a 13.333 px equivalence and we see from its own simple samples a 24 Page units PDF font is output as a rounded off 27px HTML text (by my calculation it should have been 32px ??), but both are only based on the assumption no other scalars are involved. enter image description here enter image description here

Python相关问答推荐

获取2个字节之间的异或

将C struct 的指针传递给Python中的ioctel

当变量也可以是无或真时,判断是否为假

如何使用PyTest根据self 模拟具有副作用的属性

使用Python和PRNG(不是梅森龙卷风)有效地生成伪随机浮点数在[0,1)中均匀?

如何让pyparparsing匹配1天或2天,但1天和2天失败?

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

跟踪我已从数组中 Select 的样本的最有效方法

通过优化空间在Python中的饼图中添加标签

按顺序合并2个词典列表

修复mypy错误-赋值中的类型不兼容(表达式具有类型xxx,变量具有类型yyy)

将输入聚合到统一词典中

根据列值添加时区

如何在Python中获取`Genericums`超级类型?

Python中的变量每次增加超过1

Tkinter菜单自发添加额外项目

处理具有多个独立头的CSV文件

pandas:对多级列框架的列进行排序/重新排序

跳过嵌套JSON中的级别并转换为Pandas Rame

搜索按钮不工作,Python tkinter