python pdfをwordに変換

3016 ワード

今日はpdfでwordに変換する操作を試してみましたが、参考にした他の人のコードでもあります.アドレスは:https://github.com/python-fan/pdf2wordああ、変更して、マルチスレッドを削除して、このコードにはいくつかの欠点があります.
  • スキャン版は
  • に変換できません.
  • は、主にテキストに変換され、フォーマットされていない
  • 一部のフォントは
  • に変換できません.
    この中には改善できるところがたくさんあるので、大牛がこのプロジェクトを推進することを期待しています.
    コードに必要な環境は次のとおりです.
    attrs==17.4.0
    lxml==4.1.1
    pdfminer3k==1.3.1
    pluggy==0.6.0
    ply==3.11
    py==1.5.2
    pytest==3.4.1
    python-docx==0.8.6
    six==1.11.0

    コードを共有します.
    import os
    from configparser import ConfigParser
    from io import StringIO
    from io import open
    from concurrent.futures import ProcessPoolExecutor
    
    from pdfminer.pdfinterp import PDFResourceManager
    from pdfminer.pdfinterp import process_pdf
    from pdfminer.converter import TextConverter
    from pdfminer.layout import LAParams
    from docx import Document
    import logging
    logging.Logger.propagate = False
    logging.getLogger().setLevel(logging.ERROR)
    import re
    
    
    def read_from_pdf(file_path):
        with open(file_path, 'rb') as file:
            resource_manager = PDFResourceManager()
            return_str = StringIO()
            lap_params = LAParams()
    
            device = TextConverter(
                resource_manager, return_str, laparams=lap_params)
            process_pdf(resource_manager, device, file)
            device.close()
    
            content = return_str.getvalue()
            return_str.close()
            return content
    
    def save_text_to_word(content, file_path):
        doc = Document()
        for line in content.split('
    '): paragraph = doc.add_paragraph() paragraph.add_run(remove_control_characters(line)) doc.save(file_path) def remove_control_characters(content): mpa = dict.fromkeys(range(32)) return content.translate(mpa) def pdf_to_word(pdf_file_path, word_file_path): content = read_from_pdf(pdf_file_path) content = re.compile(r'([0-9a-zA-Z_])
    ([0-9a-zA-Z_])').sub(r'\1 \2', content) content0 = re.compile(r'(-)
    ([0-9a-zA-Z_])').sub(r'\2', content) content1 = re.compile(r'
    ').sub(r'', content0) content_2 = re.compile(r'([^.])
    ').sub(r'\1', content1) content_compile = re.compile(r'\(cid:\d{1,2}\)').sub(r'', content_2) save_text_to_word(content, word_file_path) if __name__ == "__main__": root_path='pdf' for file in os.listdir(root_path): extension_name = os.path.splitext(file)[1] if extension_name != '.pdf': continue file_name = os.path.splitext(file)[0] pdf_file = root_path + '/' + file word_file = root_path + '/' + file_name + '.docx' print(' : ', file) pdf_to_word(pdf_file,word_file)

    私はmac環境でテストしたので、後日スキャン版のpdf解析を共有します.もちろん使用範囲にも限界があります.
    参考文献
    [1].PYTHONコードはPDFをWORDに一括転送することを教えます. https://www.cnblogs.com/wumingxiaoyao/p/8460973.html
    [2].Pythonを使用してPDFをwordに変換します. https://www.jianshu.com/p/49c5abfee649