私はこの質問を見つけましたが、それはコマンド ラインを使用しており、サブプロセスを使用してコマンド ラインで Python スクリプトを呼び出し、HTML ファイルを解析してフォント情報を取得したくありません。
PDFminer をライブラリとして使用したいのですが、この質問を見つけましたが、フォント名やフォント サイズなどの他の情報がなく、プレーン テキストを抽出するだけです。
PDF マイナー ライブラリを使用して PDF ファイルからフォント サイズまたはフォント名を取得する場合は、PDF ページ全体を解釈する必要があります。フォント サイズとフォント名を取得する単語、フレーズを決定する必要があります (ページ上では、異なるフォント サイズの複数の単語を使用できます)。ページに PDF マイナーを使用する構造: PDFPageInterpreter -> LTTextBox -> LTChar フォント サイズを取得する単語を見つけたら、次のように呼び出します: フォント サイズ (実際には高さ) の size メソッドと、フォントの fontname。コードは次のようになります。pdf ファイルのパス、フォント サイズを取得する単語、およびページ番号 (検索された単語のページ) を渡します。
def get_fontsize_and_fontname_for_word(self, pdf_path, word, page_number):
resource_manager = PDFResourceManager()
layout_params = LAParams()
device = PDFPageAggregator(resource_manager, laparams=layout_params)
pdf_file = file(pdf_path, 'rb')
pdf_page_interpreter = PDFPageInterpreter(resource_manager, device)
global actual_font_size_pt, actual_font_name
for current_page_number, page in enumerate(PDFPage.get_pages(pdf_file)):
if current_page_number == int(page_number) - 1:
pdf_page_interpreter.process_page(page)
layout = device.get_result()
for textbox_element in layout:
if isinstance(textbox_element, LTTextBox):
for line in textbox_element:
word_from_textbox = line.get_text().strip()
if word in word_from_textbox:
for char in line:
if isinstance(char, LTChar):
# convert pixels to points
actual_font_size_pt = int(char.size) * 72 / 96
# remove prefixed font name, such as QTBAAA+
actual_font_name = char.fontname[7:]
pdf_file.close()
device.close()
return actual_font_size_pt, actual_font_name
LTCchar クラスがサポートする他のプロパティを確認できます