失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python pdf 转换成txt csv doc 及doc转换为pdf初级

python pdf 转换成txt csv doc 及doc转换为pdf初级

时间:2022-05-22 10:26:22

相关推荐

python pdf 转换成txt csv doc   及doc转换为pdf初级

pdf,搜索相关路径下pdf文档,把pdf文档移动到指定的路径下,再对该路径下的pdf文档进行转换

缺点:无法转换带有图片的pdf文档,转换后的文档格式问题

安装相应的库

1)pip install pdfminer3k 是pdfminer的Python 3端口

2)安装docx库

pip install python_docx

使用了os.walk对特定路径下的pdf文档进行查找,并对该文档进行移动

import osimport shutilimport importlibimport sysimport redef load_file():walk = os.walk(r'C:\Users\ALFIEL\Desktop\0527')i=1for root, dirs,files in walk:print((root,dirs,files))for name in files:if len(re.findall('(\w)\.pdf',name))>=1:#添加条件对pdf文件进行筛选shutil.move(os.path.join(root,name), "C:\\Users\\SALFIEL\\Desktop\\pdfdocement\\"+str(i)+".pdf")i+=1load_file()

转换完整的代码如下:

#pdf转换器from pdfminer.pdfparser import PDFParser, PDFDocumentfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter,process_pdffrom pdfminer.layout import LAParamsfrom pdfminer.converter import PDFPageAggregatorfrom pdfminer.pdfinterp import PDFTextExtractionNotAllowedfrom docx import Documentfrom pdfminer.layout import *document = Document()import warningswarnings.filterwarnings("ignore")from pdfminer.converter import TextConverterfrom pdfminer.layout import LAParamsfrom io import StringIOfrom urllib.request import urlopenimport pandas as pdimport osdef readPDF(pdfFile):#读取pdf文件#创建PDf 资源管理器 来管理共享资源rsrcmgr = PDFResourceManager()retstr = StringIO()#数据保存到内存中laparams = LAParams()device = TextConverter(rsrcmgr, retstr, laparams=laparams)process_pdf(rsrcmgr, device, pdfFile)device.close()content = retstr.getvalue()retstr.close()return contentdef save_to_file(file_name, contents):#可以存储为相应的格式的文档,单纯以文字的pdf转换fh = open(file_name, 'w',encoding='utf-8')#若没有encoding='utf-8'则会爆出gbk编码错误。写入txt,csv需要转换格式utf-8fh.write(contents)fh.close()# save_to_file('mobiles.txt', 'your contents str')def main():#当某个目录下面寻找pdf文档文件并把它移动到某个路径下面#进行txt或则csv的转换walk=os.walk(r"C:\Users\ALFIEL\Desktop\pdfdocement")for root, dirs,files in walk:for name in files:if len(re.findall('(\w)\.pdf',name))>=1:#添加条件对pdf文件进行筛选pdfFile = open("{}".format(os.path.join(root,name)),'rb')outputString = readPDF(pdfFile)save_to_file('c.csv',outputString)def save_to_doxc(file_name,path):#以二进制读取打开文件fn = open(file_name,'rb')#用文件对象创建pdf文档分析器parser = PDFParser(fn)#创建一个pdf文档doc = PDFDocument()#连接分析器与文档对象parser.set_document(doc)doc.set_parser(parser)# 提供初始化密码# 如果没有密码 就创建一个空的字符串doc.initialize()# 检测文档是否提供txt转换,不提供就忽略if not doc.is_extractable:raise PDFTextExtractionNotAllowedelse:resource = PDFResourceManager()laparams = LAParams()device = PDFPageAggregator(resource,laparams=laparams)# 创建一个PDF解释器对象interpreter = PDFPageInterpreter(resource,device)num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0for i in doc.get_pages():#循环遍历列表,每次处理一个page的内容num_page += 1 interpreter.process_page(i)layout = device.get_result()print(layout)for x in layout:if isinstance(x,LTImage):num_image += 1if isinstance(x,LTCurve): num_curve += 1if isinstance(x,LTFigure): # figure对象num_figure += 1if isinstance(x, LTTextBoxHorizontal):#判断变量时水平文本框对象num_TextBoxHorizontal += 1# 水平文本框对象增一# 保存文本内容if hasattr(x,"get_text"):#判断x对象是否有get_text方法with open(r'{}'.format(path), 'a',encoding='utf-8') as f: #生成doc文件的文件名及路径results = x.get_text()print(results)f.write(results)f.write('\n')# 获取文本内容print('对象数量:\n','页面数:%s\n'%num_page,'图片数:%s\n'%num_image,'曲线数:%s\n'%num_curve,'水平文本框:%s\n'%num_TextBoxHorizontal)print ('处理完成')def main2():walk=os.walk(r"C:\Users\ALFIEL\Desktop\pdfdocement")for root, dirs,files in walk:for name in files:if len(re.findall('(\w)\.pdf',name))>=1:#添加条件对pdf文件进行筛选pdfFile = os.open(r"{}".format(os.path.join(root,name)),os.O_RDWR)save_to_doxc(pdfFile,path=os.path.join(root,name).replace('.pdf','.doc'))if __name__ == '__main__':main2()

注意:当写入txt,csv文件时,需要吧编码模式encoding为utf-8

doc转pdf或其他

还有通过调用win32接口进行doc的转换

from win32com.client import Dispatch, constantsdef doc2pdf(input1, output):w = Dispatch('Word.Application')try:doc = w.Documents.Open(input1, ReadOnly=1)doc.SaveAs(output, 17)return Trueexcept Exception as e:print(e)return Falsefinally:doc.Close()def main():input1 = r'C:\Users\ALFIEL\Desktop\pdfdocement\1.doc'output = r'C:\Users\ALFIEL\Desktop\pdfdocement\6.pdf'rc = doc2html(input1, output)if rc:print('转换成功')else:print('转换失败')if __name__ == '__main__':main()

其中SaveAs(output,wdformat)

wdfomat参数如下:

wdFormatDocument = 0

wdFormatDocument97 = 0

wdFormatDocumentDefault = 16

wdFormatDOSText = 4

wdFormatDOSTextLineBreaks = 5

wdFormatEncodedText = 7

wdFormatFilteredHTML = 10

wdFormatFlatXML = 19

wdFormatFlatXMLMacroEnabled = 20

wdFormatFlatXMLTemplate = 21

wdFormatFlatXMLTemplateMacroEnabled = 22

wdFormatHTML = 8

wdFormatPDF = 17

wdFormatRTF = 6

wdFormatTemplate = 1

wdFormatTemplate97 = 1

wdFormatText = 2

wdFormatTextLineBreaks = 3

wdFormatUnicodeText = 7

wdFormatWebArchive = 9

wdFormatXML = 11

wdFormatXMLDocument = 12

wdFormatXMLDocumentMacroEnabled = 13

wdFormatXMLTemplate = 14

wdFormatXMLTemplateMacroEnabled = 15

wdFormatXPS = 18照着字面意思应该能对应到相应的文件格式,如果你是office 可能支持不了这么多格式。word文件转html有两种格式可选wdFormatHTML、wdFormatFilteredHTML(对应数字8、10),区别是如果是wdFormatHTML格式的话,word文件里面的公式等ole对象将会存储成wmf格式,而选用wdFormatFilteredHTML的话公式图片将存储为gif格式,而且目测可以看出用wdFormatFilteredHTML生成的HTML明显比wdFormatHTML要干净许多。

参考自/binger819623/article/details/6770932

如果觉得《python pdf 转换成txt csv doc 及doc转换为pdf初级》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。