文件格式的转换

1. doc2docx

  对于doc文档转docx文档,依赖于操作系统。使用windows时,依赖office;使用ubuntu时,依赖libreoffice。

linux版本

1
2
def doc2docx(doc_path, docx_path):
os.system(f'soffice --headless --convert-to docx --outdir {docx_path} {doc_path}')

windows版本

1
pip install pywin32
1
2
3
4
5
6
7
8
9
from win32com import client as wc
def doc2docx(doc_path, docx_path):
# word = wc.Dispatch('Word.Application')
word = wc.DispatchEx('Word.Application')
# word.Visible=1
doc = word.Documents.Open(doc_path)
doc.SaveAs(docx_path, 16) # 16 docx 4转为txt
doc.Close()
word.Quit()

备注 (widows下转换效率比ubuntu高):

文件名 libreoffice win32
长城电工 8M 36秒 8秒
贝斯达 27.01M 2分钟 12秒

2. doc2pdf

1
2
def doc2pdf(doc_path, pdf_path):
os.system(f'soffice --headless --convert-to pdf --outdir {pdf_path} {doc_path}')

3. pdf2txt

方法一:

参考pdfplumber

1
pip install pdfplumber

1
2
3
4
5
6
7
8
import pdfplumber
def pdf2txt(input_file, output_file):
"""解析PDF到TEXT"""
with pdfplumber.open(input_file) as fp_r, open(output_file, 'w') as fp_w:
pages = fp_r.pages
for ix, page in enumerate(pages):
text = page.extract_text()
fp_w.write(text)

方法二:

1
2
3
import os
def pdf2txt(input_file, output_file):
os.system(f'pdftotext -layout {input_file} {output_file}')

备注:pdftotext命令行工具转换txt时,不加参数时,字体大小不一致的同一行文本,会转成多行。因此,pdftotext -layout [source] [target]。其中,pdftotext 工具效率高。

4. pdf2image

参考:pdf2image

1
pip install pdf2image

1
2
3
4
5
6
7
from pdf2image import convert_from_path
import tempfile
def pdf2img(filename, output_dir):
with tempfile.TemporaryDirectory() as path:
images = convert_from_path(filename)
for index, img in enumerate(images):
img.save(f'{output_dir}/page_{index}.png')

说明
thread_count :允许设置用于转换的线程数;
first_page :允许设置由pdftoppm处理的第一个页面;
last_page:允许设置最后一页由pdftoppm处理;
fmt:允许指定输出格式。目前支持的格式是jpg、png和ppm;
1
2
convert_from_path(pdf_path, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', use_cropbox=False)
convert_from_bytes(pdf_file, dpi=200, output_folder=None, first_page=None, last_page=None, fmt='ppm', use_cropbox=False)

5.pdf2xml

1
pdftohtml -i -xml [source] [target]