如何根据字体计算字符数?

2024-04-30

对于给定 PDF 文件中的每个页面,可以列出所使用的字体:

$ pdffonts -f 10 -l 10 file.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
[none]                               Type 3            Custom           yes no  no      12  0
DIIDPF+ArialMT                       CID TrueType      Identity-H       yes yes yes     95  0
DIIEDH+Arial                         CID TrueType      Identity-H       yes yes no     101  0
DIIEBG+TimesNewRomanPSMT             CID TrueType      Identity-H       yes yes yes    106  0
DIIEDG+Arial                         CID TrueType      Identity-H       yes yes no     112  0
Arial                                TrueType          WinAnsi          yes no  no     121  0

我需要根据以下内容识别可能有问题的字体pdffonts根据字体输出和计数字符。我通过实现以下代码片段来实现它:

def count_fonts_ocurrencies_by_page(pdf_filepath):
    page_layout = next(extract_pages(pdf_filepath))

    fonts = []

    for element in page_layout:
        if isinstance(element, LTTextContainer):
            for text_line in element:
                for character in text_line:
                    if isinstance(character, LTChar):
                        fonts.append(character.fontname)

    return Counter(fonts)

我期待着找到一种简单的方法来做同样的事情(或接近,我只需要知道单个 PDF 页面上的字体使用百分比之类的信息)而不迭代每个字符(如果可能),或者可能不使用整个模块,例如 pdfminer,一次只针对一个函数和一个 PDF 页面。如果我可以使用 pdfminer 的最少代码(重新)做类似的事情也会很有帮助,因为它是以模块化方式构建的。


你可以尝试使用pdftohtml来自同一个包pdffonts然后使用 xpath 解析 html 文件并考虑样式

pdftohtml -f 1 -l 1 -c -s -i -fontfullname fonts.pdf

生成的文档

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<title>fonts-html.html</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
 <br/>
<style type="text/css">
<!--
    p {margin: 0; padding: 0;}  .ft10{font-size:16px;font-family:BAAAAA+NotoSans-CondensedExtraBold;color:#000000;}
    .ft11{font-size:16px;font-family:CAAAAA+DejaVuMathTeXGyre-Regular;color:#000000;}
    .ft12{font-size:13px;font-family:DAAAAA+Baekmuk-Headline;color:#000000;}
    .ft13{font-size:13px;font-family:EAAAAA+LMMono9-Regular;color:#000000;}
    .ft14{font-size:13px;font-family:FAAAAA+CantarellRegular;color:#000000;}
    .ft15{font-size:13px;font-family:GAAAAA+Courier;color:#000000;}
-->
</style>
</head>
<body bgcolor="#A0A0A0" vlink="blue" link="blue">
<div id="page1-div" style="position:relative;width:892px;height:1263px;">
<img width="892" height="1263" src="fonts001.png" alt="background image"/>
<p style="position:absolute;top:64px;left:86px;white-space:nowrap" class="ft10"><b>Font1</b></p>
<p style="position:absolute;top:91px;left:86px;white-space:nowrap" class="ft11">font3</p>
<p style="position:absolute;top:109px;left:86px;white-space:nowrap" class="ft12">font4</p>
<p style="position:absolute;top:124px;left:86px;white-space:nowrap" class="ft13">font5</p>
<p style="position:absolute;top:144px;left:86px;white-space:nowrap" class="ft14">font6</p>
<p style="position:absolute;top:163px;left:86px;white-space:nowrap" class="ft15">font7</p>
</div>
</body>
</html>

用python解析html并按字体计数字符(类属性)

from lxml import html                      
tree = html.parse(r'/home/luis/tmp/fonts-html.html')
eleList = tree.xpath("//p[@class='ft10']")
len(eleList[0].text_content())
# text length: 5 
eleList = tree.xpath("//p[@class[contains(.,'ft')]]")
eleList[0].get('class')
# class name: 'ft10'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据字体计算字符数? 的相关文章

  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • 如何在python中附加两个字节?

    说你有b x04 and b x00 你如何将它们组合起来b x0400 使用Python 3 gt gt gt a b x04 gt gt gt b b x00 gt gt gt a b b x04 x00
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • python array(10,1) 和 array(10,) 之间的区别

    我正在尝试将 MNIST 数据集加载到数组中 当我使用 X train y train X test y test mnist load data 我得到一个数组 y test 10000 但我希望它的形状为 10000 1 数组 1000
  • 使用 Pytest 的参数化添加测试功能的描述

    当其中一个测试失败时 可以在测试正在测试的内容的参数化中添加描述 快速了解测试失败的原因 有时您不知道测试失败的原因 您必须查看代码 通过每个测试的描述 您就可以知道 例如 pytest mark parametrize num1 num2
  • python celery -A 的无效值无法加载应用程序

    我有一个以下项目目录 azima init py main py tasks py task py from main import app app task def add x y return x y app task def mul
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 使用 suds SOAP 库进行 HTTP 身份验证的奇怪行为

    我有一个正在运行的 python 程序 它使用 suds 通过 SOAP 获取大量数据 Web服务是通过分页功能实现的 这样我就可以抓取nnn每个 fetch 调用的行并获取下一个nnn与后续的电话 如果我使用如下代码向 HTTP 服务器进
  • Discord.py 嵌入中禁用按钮/冻结按钮

    I m trying to make a replica of this bot in which when I press any of the buttons below it shows a dropdown menu and you
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 非法指令:MacOS High Sierra 上有 4 条指令

    我正在尝试在 pygame 3 6 中制作一个看起来像聊天的窗口 我刚刚将我的 MacBook 更新到版本 10 13 6 在我这样做之前它工作得很好 但在我收到消息之后 非法指令 4 Code import pygame from pyg
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i

随机推荐