gpt4 book ai didi

python - 如何使用 PDFMiner 在 Python 中提取 PDF 中文本的字体颜色?

转载 作者:行者123 更新时间:2023-12-05 08:30:06 27 4
gpt4 key购买 nike

如何从 PDF 中的文本中提取字体颜色?

我已经尝试使用 PDFMiner 探索 LTTextLTChar 对象,但似乎这个模块只允许提取字体大小和样式,而不是颜色。

最佳答案

我查看了 PDFMiner 的所有源代码(未维护)和 PDFMiner.Sixth (叉)。 Python 模块都不允许您提取颜色。在两个模块的问题部分中,提取字体颜色是一个常见问题。

我也看了PDFPlumber ,它使用 PDFMiner.Sixth。该模块提取字体颜色。提取的颜色元素包括stroking_color,即字符的轮廓和non_stroking_color,,即字符的填充。我查看了从示例 PDF 中提取的颜色,它们与 RGB 颜色相匹配。

import pdfplumber

pdf_file = pdfplumber.open('path_to_pdf')
for p, char in zip(pdf_file.pages, pdf_file.chars):
words = p.extract_words(keep_blank_chars=True)
texts = p.extract_text()
print(f"Page Number: {p.page_number}")
print(f"Font Name: {char['fontname']}")
print(f"Font Size: {char['size']}")
print(f"Stroking Color: {char['stroking_color']}")
print(f"Non_stroking Color: {char['non_stroking_color']}")
print(texts.strip())
print('\n')

未回答的问题是:

如何提取字体颜色并仍然使用 PDFMiner 代码?

下面的代码允许我同时使用 PDFMiner.SixthPDFPlumber 从中提取各种元素,例如文本、字体名称、字体大小、stroking_color 和 non_stroking_color源 PDF 文件。

import pdfplumber

from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTChar


with open('path_to_pdf', 'rb') as scr_file:
with pdfplumber.PDF(scr_file) as pdf_file:
for page_layout, char in zip(extract_pages(scr_file), pdf_file.chars):
for element in page_layout:
if isinstance(element, LTTextContainer):
for text_line in element:
for character in text_line:
if isinstance(character, LTChar):
print(element.get_text())
print(f"Font Name: {character.fontname}")
print(f"Font Size: {character.size}")
print(f"Stroking Color: {char['stroking_color']}")
print(f"Non_stroking Color: {char['non_stroking_color']}")
print('\n\n')

更新 03-09-2021

我仍在致力于将这些功能网格化和同步在一起。我检查了它们,它们似乎输出了正确的元素。

import pdfplumber
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTChar, LAParams


def extract_character_characteristics(pdf_file):
number_of_pages = len(list(extract_pages(pdf_file)))
for page_layout in extract_pages(pdf_file, laparams=LAParams()):
print(f'Processing Page: {number_of_pages}')
number_of_pages -= 1
for element in page_layout:
if isinstance(element, LTTextContainer):
for text_line in element:
for character in text_line:
if isinstance(character, LTChar):
if character.get_text() != ' ':
print(f"Character: {character.get_text()}")
print(f"Font Name: {character.fontname}")
print(f"Font Size: {character.size}")
print('\n')


def extract_character_colors(pdf_file):
with pdfplumber.PDF(pdf_file) as file:
for char in file.chars:
if char['text'] != ' ':
print(f"Page Number: {char['page_number']}")
print(f"Character: {char['text']}")
print(f"Font Name: {char['fontname']}")
print(f"Font Size: {char['size']}")
print(f"Stroking Color: {char['stroking_color']}")
print(f"Non_stroking Color: {char['non_stroking_color']}")
print('\n')


with open('test.pdf', 'rb') as scr_file:
extract_character_characteristics(scr_file)

关于python - 如何使用 PDFMiner 在 Python 中提取 PDF 中文本的字体颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66370272/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com