【办公类-02】周计划docx转png

21 篇文章 0 订阅

办公需求:

每月需要将班级周计划docx的第一页上传到班级网页中,由于周计划内有大量表格,因此我一般是用微信的ALT+A功能对周计划页面进行截图,将固定内容的图片上传网页。其中有两个问题:

1、无法批量截图:每月四份周计划,需要逐一打开文本,截图,保存,输入名称

2、难以统一选框范围:ALT+A截图时,需要手动控制选框范围。无法保证每份周计划的截取的大小相同。

编程需求:

Word(docx)批量转成JPG图片

代码实现:

一、转载代码

通过大量搜索代码,我找到了一个将docx通过PDF转成png图片的代码。测试可用。

此代码可以将“桌面上的word2pdf2png‘文件夹里的所有docx文件’依次转成PDF和png。效果如下:

1、素材和文件名(位置在桌面\word2pdf2png文件夹)

2、生成效果(位置在桌面\word2pdf2png文件夹)

文件夹内包含内容:

1、原文件docx

2、生成的PDF

3、生成的png(多张,比如第一周docx内有4页,所以生成4张png)

三、转载代码

'''
作者:毛毛 
性质:转载
原网址 https://zhuanlan.zhihu.com/p/367985422

安装python,确保以下模块已经安装:win32com,fitz,re
在桌面新建文件夹,命名为:word2pdf2png
将需要转换的word(只能docx格式,可以多个)放入文件夹word2pdf2png
复制以下代码并运行。

本代码只生成png 文件夹内只有一级,子文件不生成
'''

#coding=utf-8
from win32com.client import Dispatch
import os
import re
import fitz
wdFormatPDF = 17 #转换的类型
zoom_x=5 #尺寸大小,越大图片越清晰
zoom_y=5 #尺寸大小,越大图片越清晰,长宽保持一致
rotation_angle=0#旋转的角度,0为不旋转

def doc2pdf2png(input_file):

    for root, dirs, files in os.walk(input_file):
        for file in files:
            if re.search('\.(docx|doc)$', file):
                filename = os.path.abspath(root + "\\" + file)
                print('filename', filename)
                word = Dispatch('Word.Application')
                doc = word.Documents.Open(filename)
                doc.SaveAs(filename.replace(".docx", ".pdf"), FileFormat=wdFormatPDF)
                doc.Close()
        word.Quit()

    for root, dirs, files in os.walk(input_file):
        for file in files:
            if re.search('\.pdf$', file):
                filename = os.path.abspath(root + "\\" + file)
                print('filename', filename)
                # 打开PDF文件
                pdf = fitz.open(filename)
                # 逐页读取PDF
                for pg in range(0, pdf.pageCount):
                    page = pdf[pg]
                    # 设置缩放和旋转系数
                    trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
                    pm = page.getPixmap(matrix=trans, alpha=False)
                    # 开始写图像
                    pm.writePNG(filename.replace('.pdf', '') + str(pg+1) + ".png")
                pdf.close()

二、修改后的代码——删除PDF和Word,只留下png的第1页

援引的代码解决了批量docx转png的问题,但是不符合我的需求:

我希望文件夹里只留下每份Word中第一页的png图片,以便上传。

 

 为此我搜索CSDN中的相关信息,添加了一个删除指令,并在马先生指导下,运用f'{}和正则的方法,减少了删除代码段的长度。具体效果和代码如下:

(一)素材及位置

1、素材和文件名(位置在桌面\word2pdf2png文件夹)

(二)生成效果(位置在桌面\word2pdf2png文件夹)

文件夹内包含内容:

1、保留每个word生成的第1张png,尾数是1

  

(三)转载代码 添加后的代码段

'''
作者:毛毛 
性质:转载
原网址https://zhuanlan.zhihu.com/p/367985422afd
修改:阿夏
性质:添加部分段落

安装python,确保以下模块已经安装:win32com,fitz,re
在桌面新建文件夹,命名为:word2pdf2png
将需要转换的word(只能docx格式,可以多个)放入文件夹word2pdf2png
复制以下代码并运行。

本代码只生成png 文件夹内只有一级,子文件不生成
'''

#coding=utf-8
from win32com.client import Dispatch
import os
import re
import fitz
wdFormatPDF = 17 #转换的类型
zoom_x=5 #尺寸大小,越大图片越清晰
zoom_y=5 #尺寸大小,越大图片越清晰,长宽保持一致
rotation_angle=0#旋转的角度,0为不旋转

def doc2pdf2png(input_file):

    for root, dirs, files in os.walk(input_file):
        for file in files:
            if re.search('\.(docx|doc)$', file):
                filename = os.path.abspath(root + "\\" + file)
                print('filename', filename)
                word = Dispatch('Word.Application')
                doc = word.Documents.Open(filename)
                doc.SaveAs(filename.replace(".docx", ".pdf"), FileFormat=wdFormatPDF)
                doc.Close()
        word.Quit()

    for root, dirs, files in os.walk(input_file):
        for file in files:
            if re.search('\.pdf$', file):
                filename = os.path.abspath(root + "\\" + file)
                print('filename', filename)
                # 打开PDF文件
                pdf = fitz.open(filename)
                # 逐页读取PDF
                for pg in range(0, pdf.pageCount):
                    page = pdf[pg]
                    # 设置缩放和旋转系数
                    trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
                    pm = page.getPixmap(matrix=trans, alpha=False)
                    # 开始写图像
                    pm.writePNG(filename.replace('.pdf', '') + str(pg+1) + ".png")
                pdf.close()


mydesktop=os.path.join(os.path.expanduser('~'), "Desktop")
print(mydesktop)
doc2pdf2png(mydesktop+r'\word2pdf2png')
# 桌面新建一个文件word2pdf2png 先出PDF 再出图片

# import shutil
# shutil.rmtree('C:/Users/Administrator/Desktop/\word2pdf2png')# 只有PDF文件,删除外包文件夹及里面的PDF
# 如果目录包含其他不是pdf文件的其他文件,请改用以下命令

# 删除生成文件PDF  和 生成文件docx
for parent, dirnames, filenames in os.walk('C:/Users/Administrator/Desktop/\word2pdf2png'):
    for fn in filenames:
        if fn.lower().endswith('.pdf'):
            os.remove(os.path.join(parent, fn))
        if fn.lower().endswith('.docx'):# 删除原始文件docx 正则[pdf|docx]套不上,只能分成两条了
            os.remove(os.path.join(parent, fn))
           
# 删除png中,尾号是2-8的png(Word只要第一页,后面生成的第二页图片不要
for parent, dirnames, filenames in os.walk('C:/Users/Administrator/Desktop/\word2pdf2png'):
        for fn in filenames:
            for k in range(2,9):                # png文件名的尾数是2,3,4,5,6,7,8 不确定共有几页,可以把9这个数字写大一点)
                if fn.lower().endswith(f'{k}.png'):  # 删除尾号为2,3,4,5,6,7,8的png图片 f{k}='{}'.formart(k) 
                    os.remove(os.path.join(parent, fn))

(四)实用过程 

上传时可以看到周次名称,只有图片的情况下,减少选错的干扰。

 

上传的图片尺寸太大了,再补个程序缩小png图片的尺寸。

png图片大小在这里调整:

等于1时的网页效果

  end

神奇的代码可以减轻办公效率哦!!!

其他参考

#005 Python实现批量 Word to PNG图片-CSDN博客文章浏览阅读139次。有个网友在WordtoPDF的文章中留言说有没有WORDTOPNG。有需求,必须安排,业务场景做出来在聊聊。https://blog.csdn.net/lxcsifu/article/details/132769644?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170634671016800185875735%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=170634671016800185875735&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-132769644-null-null.142^v99^pc_search_result_base3&utm_term=python%20docx%20%E8%BD%ACpng&spm=1018.2226.3001.4187

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值