• 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
  • 相关阅读:
    docker入门教程
    语料库数据处理个案实例(词性赋码、词性还原)
    Javascript知识【案例:注册表单校验】
    风险识别和评估
    离散数学 --- 图论基础 --- 无向图的连通性和有向图的连通性
    从 Java 小白到收获 BAT 一线大厂offer ,分享出我这 2年的经验
    KVM虚拟化学习总结
    基于 ECDSA 的 BSV 预言机
    SpringCloud搭建微服务之Zuul网关
    RFID技术:钢条加工现场的智能化管理利器
  • 原文地址:https://blog.csdn.net/leshen_88/article/details/135990162