【发布时间】:2021-07-11 23:04:25
【问题描述】:
对于给定 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 输出识别可能有问题的字体,并根据其字体计算字符数。我通过实现以下 sn-p 实现了它:
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 中的最少代码执行类似(重新)操作,那也会很有帮助,因为它是以模块化方式构建的。
【问题讨论】:
-
文本渲染(编码、字形)和文本提取(ToUnicode、CMap)是有区别的吧?我同意我所问的不是一项微不足道的任务,但也许对我的问题的任何指导/澄清都会有所帮助和有价值。作为PDF新手,缺乏领域词汇也是一件事情