【发布时间】:2019-05-18 16:59:30
【问题描述】:
我正在使用 poppler pdffonts 来获取 pdf 文档中的字体。 下面是示例输出
$ pdffonts "some.pdf"
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
TimesNewRoman TrueType WinAnsi no no no 36 0
TimesNewRoman,Bold TrueType WinAnsi no no no 38 0
EDMFMD+Symbol CID TrueType Identity-H yes yes yes 41 0
Arial TrueType WinAnsi no no no 43 0
Arial,Bold TrueType WinAnsi no no no 16 0
现在我只想在上面的输出中获取“encoding”和“uni”列值。但由于每行空间不一致,我无法获取。
尝试过的方法(Python):
1) 按空格分割每一行并按空格连接然后分割,以便结果列表中索引 2 和 5 的元素将为我提供每行所需的值。由于行值中有空格,这种方法失败了。
代码示例:
for line in os.popen("pdffonts some.pdf").readlines():
print ' '.join(line.split()).split()
输出:
['name', 'type', 'encoding', 'emb', 'sub', 'uni', 'object', 'ID']
['------------------------------------', '-----------------', '----------------', '---', '---', '---', '---------']
['FMGLMO+MyriadPro-Bold', 'Type', '1C', 'Custom', 'yes', 'yes', 'yes', '127', '0']
['FMGMMM+MyriadPro-Semibold', 'Type', '1C', 'Custom', 'yes', 'yes', 'yes', '88', '0']
['Arial-BoldMT', 'TrueType', 'WinAnsi', 'no', 'no', 'no', '90', '0']
['TimesNewRomanPSMT', 'TrueType', 'WinAnsi', 'no', 'no', 'no', '92', '0']
['FMGMHL+TimesNewRomanPSMT', 'CID', 'TrueType', 'Identity-H', 'yes', 'yes', 'no', '95', '0']
['FMHBEE+Arial-BoldMT', 'CID', 'TrueType', 'Identity-H', 'yes', 'yes', 'no', '100', '0']
['TimesNewRomanPS-BoldMT', 'TrueType', 'WinAnsi', 'no', 'no', 'no', '103', '0']
2) 使用正则表达式将输出的每一行至少拆分为两个空格。这种方法失败了,因为现在我无法将索引 5 打成棒状,因为只有一个空格。
代码示例:
for line in os.popen("pdffonts some.pdf").readlines():
print re.split(r'\s{2,}', line.strip())
输出:
['name', 'type', 'encoding', 'emb sub uni object ID']
['------------------------------------ ----------------- ---------------- --- --- --- ---------']
['FMGLMO+MyriadPro-Bold', 'Type 1C', 'Custom', 'yes yes yes', '127', '0']
['FMGMMM+MyriadPro-Semibold', 'Type 1C', 'Custom', 'yes yes yes', '88', '0']
['Arial-BoldMT', 'TrueType', 'WinAnsi', 'no', 'no', 'no', '90', '0']
['TimesNewRomanPSMT', 'TrueType', 'WinAnsi', 'no', 'no', 'no', '92', '0']
['FMGMHL+TimesNewRomanPSMT', 'CID TrueType', 'Identity-H', 'yes yes no', '95', '0']
['FMHBEE+Arial-BoldMT', 'CID TrueType', 'Identity-H', 'yes yes no', '100', '0']
['TimesNewRomanPS-BoldMT', 'TrueType', 'WinAnsi', 'no', 'no', 'no', '103', '0']
AWK: 由于空间问题而失败。请与原始输出进行比较以获得差异。
$ pdffonts "some.pdf"|awk '{print $3}'
encoding
----------------
WinAnsi
WinAnsi
TrueType
WinAnsi
WinAnsi
【问题讨论】: