15

私はこの質問を見つけましたが、それはコマンド ラインを使用しており、サブプロセスを使用してコマンド ラインで Python スクリプトを呼び出し、HTML ファイルを解析してフォント情報を取得したくありません。

PDFminer をライブラリとして使用したいのですが、この質問を見つけましたが、フォント名やフォント サイズなどの他の情報がなく、プレーン テキストを抽出するだけです。

4

7 に答える 7

2

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 クラスがサポートする他のプロパティを確認できます

于 2020-05-11T11:56:43.613 に答える