• python将word文件转换成pdf文件


    1、word文件转换成pdf文件

    要将word文件转换成pdf文件,可以使用Python的pywin32库结合Microsoft Office软件来实现。
    方法一:

    import win32com.client as win32
    
    def word_to_pdf(input_file, output_file):
        word = win32.gencache.EnsureDispatch('Word.Application')
        doc = word.Documents.Open(input_file)
        doc.SaveAs(output_file, FileFormat=17)
        doc.Close()
        word.Quit()
    
    # 示例使用
    input_file = 'input.docx'
    output_file = 'output.pdf'
    word_to_pdf(input_file, output_file)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在代码中,首先导入了win32com.client模块,并使用EnsureDispatch方法来创建一个Word应用程序的对象。然后使用Documents.Open方法打开输入的Word文件。

    通过调用SaveAs方法,并将FileFormat参数设置为17,可以将Word文件保存为PDF格式。最后,使用Close方法关闭打开的文档,并使用Quit方法关闭Word应用程序。

    请注意,此代码需要安装pywin32库和Microsoft Office软件才能正常运行。

    方法二:
    此方法适用于linux和Windows环境,方法一只适用于Windows环境

    # word转Pdf
    def word_change_pdf(word_file_path):
        """
        将word文件转换成pdf文件
        :param word_file_path: word文件地址
        :return: 返回转成的pdf地址信息
        """
    
        suffix = os.path.basename(word_file_path).split('.')[1]
        # 另存为pdf文件
        pdf_path = word_file_path.replace(suffix, "pdf")
        out_dir = pdf_path.rsplit('/', 1)[0] + '/'
    
        if 'window' in os_system:
            # LibreOffice本地位置D:/Download/LibreOffice/program/soffice.exe
            command = ['D:/Download/LibreOffice/program/soffice.exe', '--convert-to', 'pdf', '--outdir', out_dir,
                       word_file_path]
        else:
            # LibreOffice在虚拟机的位置:/usr/bin/libreoffice7.6
            command = ['/opt/libreoffice7.6/program/soffice.bin', '--convert-to', 'pdf', '--outdir', out_dir,
                       word_file_path]
        subprocess.Popen(command).communicate()
    
        return pdf_path
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2、pdf转换成图片

    使用Python可以使用PyPDF2库将PDF文件转换为图片文件。
    方法1:

    import os
    import PyPDF2
    from pdf2image import convert_from_path
    
    # 将PDF文件转换为图片
    def pdf_to_image(input_path, output_path):
        # 打开PDF文件
        with open(input_path, "rb") as file:
            pdf = PyPDF2.PdfReader(file)
            
            # 遍历PDF的每一页
            for i in range(len(pdf.pages)):
                # 将页面转换为图像
                images = convert_from_path(input_path, first_page=i+1, last_page=i+1)
                
                # 保存图像文件
                image_path = os.path.join(output_path, "page{}.jpg".format(i+1))
                images[0].save(image_path, "JPEG")
    
    # 指定PDF文件和输出文件夹
    input_file = "path/to/input.pdf"
    output_folder = "path/to/output"
    
    # 调用函数进行转换
    pdf_to_image(input_file, output_folder)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    请注意,在运行此代码之前,您需要安装PyPDF2库和pdf2image库。您可以使用以下命令安装这两个库:

    pip install PyPDF2 pdf2image
    
    • 1

    同时,还需要安装poppler工具,以在Python中处理PDF文件:

    • Windows用户可以从以下链接下载并安装poppler:https://blog.alivate.com.au/poppler-windows/
    • Linux用户可以使用以下命令安装poppler
    sudo apt-get install -y poppler-utils
    
    • 1

    此代码将把每一页PDF文件转换为单独的JPEG图像文件,并将它们保存在指定的输出文件夹中。

    方法2:

    import fitz
    
    def pdf_change_png(pdf_file_path):
        """
        将pdf转换成图片
        :param pdf_file_path: pdf文件地址
        """
    
        jpg_name = pdf_file_path.replace("pdf", "jpg")
    
        # 另存为pdf文件
        try:
            pdf_doc = fitz.open(pdf_file_path)
            for pg in range(pdf_doc.page_count):
                page = pdf_doc[pg]
                rotate = int(0)
                # 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。
                # 此处若是不做设置,默认图片大小为:792X612, dpi=96
                zoom_x = 1.33333333  # (1.33333333-->1056x816)   (2-->1584x1224)
                zoom_y = 1.33333333
                mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)
                pix = page.get_pixmap(matrix=mat, alpha=False)
    
                pix.save(jpg_name)  # 将图片写入指定的文件夹内
    
        except IOError:
            raise ('pdf转png失败', pdf_file_path)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    3、将图片进行抠图处理

    将图片进行抠图处理

    def extract_picture(local_path, exchange_picture_path, qm_type):
        """
        将上传的图片进行抠图,
        :param local_path: 本地上传的文件地址
        :param exchange_picture_path: 抠出的图片地址
        :param qm_type: 1为扣签名图,2为扣指纹图;注:签名图为白底黑字,指纹图为白底红字,若是其他的颜色请改变item的判断值
        """
        img = Image.open(local_path)
        img = img.convert('RGBA')
        data = img.getdata()
        new_data = []
        if qm_type == 1:
            # 签名的抠图
            for item in data:
                # 签名信息
                if item[0] <= 60 and item[1] <= 60 and item[2] <= 60:
                    new_data.append(item)
                else:
                    new_data.append((255, 255, 255, 0))
        elif qm_type == 2:
            # 指纹的抠图
            for item in data:
                # 指纹信息
                if item[0] >= 120 and item[1] <= 100 and item[2] <= 100:
                    new_data.append(item)
                else:
                    new_data.append((255, 255, 255, 0))
        else:
            return
        img.putdata(new_data)
        img.save(exchange_picture_path, format='PNG')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    等保测评结论为差,是不是表示等保工作白做了?
    第二篇 如何选择操作系统
    ArcGIS:如何迭代Shp文件所有要素并分别导出为Shp文件?
    Eclipse启动出现问题:A java runtime Environment(JRE) or java Development…………
    【2023提前批 之 面经】~ 锐捷
    MyBatis-Plus找不到Mapper.xml文件的解决方法
    python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析
    CSS 3之美化表格样式(二)
    Java 线程池
    【Linux】shell 提示符
  • 原文地址:https://blog.csdn.net/leshen_88/article/details/135990162