python pdfをwordに変換
3016 ワード
今日はpdfでwordに変換する操作を試してみましたが、参考にした他の人のコードでもあります.アドレスは:https://github.com/python-fan/pdf2wordああ、変更して、マルチスレッドを削除して、このコードにはいくつかの欠点があります.スキャン版は に変換できません.は、主にテキストに変換され、フォーマットされていない 一部のフォントは に変換できません.
この中には改善できるところがたくさんあるので、大牛がこのプロジェクトを推進することを期待しています.
コードに必要な環境は次のとおりです.
コードを共有します.
私はmac環境でテストしたので、後日スキャン版のpdf解析を共有します.もちろん使用範囲にも限界があります.
参考文献
[1].PYTHONコードはPDFをWORDに一括転送することを教えます. https://www.cnblogs.com/wumingxiaoyao/p/8460973.html
[2].Pythonを使用してPDFをwordに変換します. https://www.jianshu.com/p/49c5abfee649
この中には改善できるところがたくさんあるので、大牛がこのプロジェクトを推進することを期待しています.
コードに必要な環境は次のとおりです.
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