python4行代码实现pdf转换为docx|python实现pdf与docx之间互转

news2024/10/6 16:29:38

本期目录

  • 一、pdf转docx
  • 二、docx转pdf
  • 三、doc转换为docx
  • 四、xls格式转换为xlsx
  • 五、pdf批量转换成docx
  • 六、docx批量转成pdf

一、pdf转docx

将PDF 格式转换为Word格式要求很高,很多的转换网页需要付费、而且转换的效果不好。
在Python中,利用pdf2docx库可以很好地实现这个需求,直接使用pip安装即可。

pip install pdf2docx

坐等安装完成
在这里插入图片描述
该模块有一个convert()方法,可以实现将PDF格式转换为Word格式
(默认转换整个文档)完整代码如下:

from pdf2docx import Converter

cv = Converter("C:/Users/ypzhao/Desktop/毕业论文.pdf")
cv.convert("C:/Users/ypzhao/Desktop/毕业.docx", start=0, end=None)
cv.close()

(转换指定范围)完整代码如下:

from pdf2docx import Converter

cv = Converter("C:/Users/ypzhao/Desktop/毕业论文.pdf")
cv.convert("C:/Users/ypzhao/Desktop/毕业论文.docx", pages=[0,2])
cv.close()

使用 pages 参数指定要转换的页码范围。

二、docx转pdf

首先安装库

pip install pypiwin32
from win32com.client import Dispatch

old_file_path = r"C:/Users/ypzhao/Desktop/毕业论文.docx"
new_file_path = r"C:/Users/ypzhao/Desktop/毕业论文_convert.pdf"
word = Dispatch('Word.Application')
doc = word.Documents.Open(old_file_path)
doc.SaveAs(new_file_path,17)
doc.Close()
word.Quit()

转换后的效果和另存为的pdf的效果一样

首先,需要 import win32com 库中的 Dispatch 类。然后,定义变量 old_file_path 和 new_file_path 分别表示原文件路径和目标文件路径。在这里,原文件路径为 “C:/Users/ypzhao/Desktop/毕业论文.docx”,目标文件路径为 “C:/Users/ypzhao/Desktop/毕业论文_convert.pdf”。

接着,创建一个 Word.Application 对象,并打开原文件,获取 Document 对象。调用 SaveAs 方法,将文档以 PDF 格式保存到指定路径,并设置参数 17 指定文档的保存格式为 PDF。最后,关闭文档,并退出 Word 应用程序。

win32com 库可以帮助我们在 Python 程序中使用 Windows 中的 COM 应用程序,比如 Word、Excel、PowerPoint 等 Office 软件,从而实现自动化操作。在上述代码中,我们利用 win32com 库的 Dispatch 类创建了一个 Word.Application 的对象,之后打开了指定的 DOCX 文档,并通过 SaveAs 方法将其另存为 PDF 格式的文档。该过程完全不需要手动干预,实现了自动化处理,提高了效率。

三、doc转换为docx

from win32com.client import Dispatch
old_file_path = r"C:/Users/ypzhao/Desktop/毕业论文.doc"
new_file_path = r"C:/Users/ypzhao/Desktop/毕业论文_convert.docx"

word = Dispatch('Word.Application')
doc = word.Documents.Open(old_file_path)
doc.SaveAs(new_file_path,12)
doc.Close()
word.Quit()

四、xls格式转换为xlsx

from win32com.client import Dispatch
old_file_path = r"C:/Users/ypzhao/Desktop/毕业论文.xls"
new_file_path = r"C:/Users/ypzhao/Desktop/毕业论文_convert.xlsx"

excel = Dispatch('Excel.Application')
wb = excel.Workbooks.Open(old_file_path)
wb.SaveAs(new_file_path,51)
wb.Close()
excel.Quit()

五、pdf批量转换成docx

通过使用 pdf2docx 库实现了将 PDF 格式的文件批量转换为 DOCX 格式的文件。

首先,定义变量 path 和 path_convert 分别表示原文件所在目录和转换后文件存储目录。此处分别为 “C:/Users/ypzhao/Desktop/pdf/” 和 “C:/Users/ypzhao/Desktop/docx/”。

然后,使用 os 模块中的 listdir 方法遍历目录下所有文件,判断文件类型如果是 PDF,则进行转换。利用 Converter 类打开 PDF 文件,指定转换后的目标文件名为 {file_name}.docx,并调用 convert 方法将其转换为 DOCX 文件,并指定页码范围。最后,关闭 Converter 对象,转换完成。

import os
from pdf2docx import Converter

path = "C:/Users/ypzhao/Desktop/pdf/"
path_convert = "C:/Users/ypzhao/Desktop/docx/"

for i in os.listdir(path):
    file_name,file_suffix = i.split(".")
    if file_suffix == "pdf":
        cv = Converter(path+f"{i}")
        cv.convert(path_convert+f"{file_name}"+".docx", start=0, end=None)
        cv.close()
    else:
        pass

六、docx批量转成pdf

from time import sleep
import os
from win32com.client import Dispatch

path = "C:/Users/ypzhao/Desktop/docx/"
path_convert = "C:/Users/ypzhao/Desktop/pdf/"
print("-----doc开始转换为docx-----")

for i in os.listdir(path):
    file_name,file_suffix = i.split(".") 
    if file_suffix == "doc":
        word = Dispatch('Word.Application')
        doc = word.Documents.Open(path+f"{i}")
        doc.SaveAs(path+f"{file_name}.docx",FileFormat=12)
        print(i,"转换完成")
        doc.Close()
        word.Quit()
        sleep(3)

print("-----开始转换为pdf-----")
for i in os.listdir(path):
    file_name,file_suffix = i.split(".") 
    if file_suffix == "docx":
        word = Dispatch('Word.Application')
        doc = word.Documents.Open(path+f"{i}")
        doc.SaveAs(path_convert+f"{file_name}.pdf",FileFormat=17)
        print(i,"...转换完成")
        doc.Close()
        word.Quit()
        sleep(3)
    else:
        pass

这段代码的作用是将指定目录下的 Word 文档(.doc)转换为 Word 文档(.docx),然后再将其转换为 PDF 格式。

其中,代码中使用了 sleep(3) 函数来暂停程序执行,是为了避免在 Word 应用程序未完全关闭之前就打开下一个文档导致程序出错。

需要注意的是,由于在进行文档转换时可能会出现各种问题,例如格式错误、页面布局混乱等,因此建议在转换完成后手动检查一下转换后的文档是否正常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/554550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

el-popover无法点击、点击没反应、不能正常唤起弹出框

项目场景: 表格内操作按钮点击后,刷新列表更新按钮显示状态 问题描述 点击更新状态后的那条数据操作按钮。 发现element-ui的el-popover无法点击唤出弹窗,但刷新页面就可以正常点击进行操作。即el-popover刷新列表后无法点击 原因分析&…

5G信道建模研究进展与展望

5G信道建模研究进展与展望 一、信道建模定义二、5G信道建模研究进展1. 5G信道建模的理论框架1.1 大尺度衰落特性1.2 小尺度衰落特性1.3 信道新特性 2. 5G信道测量平台和应用场景2.1 5G信道测量平台2.2 5G信道的应用场景 3. 5G信道特性提取与建模 三、未来6G信道建模的研究方向1…

赛效:如何修改调整GIF动图宽高尺寸

1:在网页上搜索踢踢零动图,在首页点击“GIF尺寸缩放”,进入该功能页面。 2:在操作页面上添加GIF动图。 3:在左侧菜单里设置宽、高,如果不想让动图变形,可以锁定比例。设置完成后,点击…

个人博客系统的测试报告

目录 1.项目背景2.项目功能3.测试计划3.1功能测试3.1.1 测试用例设计3.1.2 实际执行测试的部分操作步骤 3.2自动化测试3.2.1 脑图3.2.2 代码编写 1.项目背景 实现一个类似CSDN的个人博客系统 支持以下核心功能: 支持用户注册登录并设置个人信息如头像、昵称等等; 对…

【事务】MySql Lock wait timeout exceeded该如何处理?service层调用内部方法事务失效如何处理?

文章目录 参考文章问题描述解决办法办法1. 新增查询操作办法2. 判断实际事务场景解决办法 参考文章 MySql Lock wait timeout exceeded该如何处理? AopContext.currentProxy()的使用 问题描述 同一事务内包含对同一条记录进行新增、更新操作,导致mysq…

年薪30W的测试被开除,回怼道:“反正我有技术,在哪不一样”这种观点对吗?

一位年薪30W测试工程师被开除回怼道:“反正我有技术,在哪不一样” 一技傍身,万事不愁,当我们掌握了一技之长后,在职场上说话就硬气了许多,不用担心被炒,反过来还可以炒了老板,这一点…

Hadoop基础学习---4、HDFS写、读数据流程、NameNode和SecondaryNameNode、DataNode

1、HDFS写、读数据流程 1.1 HDFS写数据流程 1.1 剖析文件写入 1、客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。 2、NameNode返回是否可以上传。 3、客户端请求第一个Block上传到哪几…

选择多张图片的方案

适用场景 1、微信公众号开发,代替wx.chooseImage,选择多张图片上传自己服务器; 2、常规的javascript的开发,选择多张图片上传到自己的服务器; 3、扩展到vue和react等框架使用; 整体思路 1、使用input控…

文章百度秒收录方法大全

文章百度秒收录方法大全,百度秒收录?直接套用这个模版创作原创文章#网络营销#案例文章 今天分享几个提高文章质量的简单方法,看一眼就能够操作的。 1、引用金句很多人不知道怎么表达观点,引用金句是一个不错的方法,平时多收集&…

(IDEA)springCloud项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案

idea导入本地jar包 方法一:点击左上角File–>Project Structure–>Modules。打开Modules界面点击下方号,选择第一项,找到想要导入的本地jar包。此方法可以使项目使用导入的jar包程序不报错,但是在打包项目时,会出现找不到程…

Kyligence Zen使用体验 - 从数据可视化说起

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

SpringBoot JDBC连接数据库项目代码构建

本期引言: 本文将介绍如何使用SpringBoot框架构建一个简单的JDBC连接数据库项目。在这个项目中,我们将使用MySQL作为数据库,通过SpringBoot框架实现数据的增删改查操作。本文将涵盖以下内容: 配置项目所需的环境和工具创建Sprin…

01 Android开机启动之整体分析

Android开机启动之整体分析 一、Android系统整体架构图 Android是谷歌开发的一款基于Linux的开源操作系统 PowerManagement:系统最底层是电源管理,只有通过电源上电,系统才能开启 Linux kernel:驱动层,里面包括Audio、Carmera、usb等各种外设的驱动程序。 HAL层:硬件…

snmp关闭指定网口

一、下载安装MIB Network Management / Network Monitoring / SNMP Monitoring / MIB Browser 1. 选择interfaces->ifTable->ifEntry,右键Table View,如上图所示 2.选择一个你想要设置的网口,点击上方的SNMP SET,弹出窗口 3.OID获取 …

多模态对话语言模型-VisualGLM-6B

多模态对话语言模型-VisualGLM-6B 一、简介二、使用模型推理三、部署工具网页版 DemoAPI部署四、example五、交流一、简介 VisualGLM-6B 是一个开源的,支持图像、中文和英文的多模态对话语言模型,语言模型基于 ChatGLM-6B,具有 62 亿参数;图像部分通过训练 BLIP2-Qformer 构…

【网络】IP协议

文章目录 IP协议预备知识网络层解决的问题如何理解IP地址关于路由器 IP协议格式各个字段的含义IP报头的本质IP如何将报头与有效载荷进行分离IP如何决定将有效载荷交付给上层哪一个协议(如何分用)32位源IP地址和32位目的IP地址重新理解socket编程 分片与组装数据链路层解决的问题…

无线麦克风加充电方案(LDR6023C)火爆各大直播平台

最近小编在网上经常看到一种新型无线领夹麦克风,不知道什么时候开始突然就火了,在很多网络平台都能看到。甚至在刚刚结束的东京奥运会上,央视主持人在报道时,用的就是这种类型的无线领夹麦克风。而且这两天,有多厂商在…

嵌入式 QT纯代码设计UI

目录 1.1 实例功能 1.2 界面创建 1.3 界面组件的创建与布局 1.4 信号与槽的关联 UI 的可视化设计是对用户而言的,其实底层都是 C 的代码实现,只是 Qt 巧妙地进行了处理,让用户 省去了很多繁琐的界面设计工作。 由于界面设计的底层其实都…

数据结构—排序算法(归并非比较)

目录 1、 归并排序 1.1 基本思想 1.2 归并排序递归方式的实现 1.3 归并排序非递归方式的实现 1.4 归并排序的特性总结 2、计数排序 2.1 计数排序基本思想 2.2 计数排序的实现 2.3 计数排序的特性总结: 1、 归并排序 1.1 基本思想 归并排序(MER…

反射技术

一、获取Class对象 方式一&#xff1a;类名.class // 方式一&#xff1a;类名.classClass<Student> studentClass Student.class;System.out.println(studentClass);方式二&#xff1a;static Class forName(String fullNameWithPackage) 需要注意的是&#xff0c;for…