python将word文件转换成pdf文件,pdf转图片、将图片抠图

本文介绍了如何使用Python的pywin32和PDF转换库如PyPDF2和pdf2image将Word文件转换为PDF,以及如何将PDF转换为图片,并提供了一个抠图函数处理图片内容。
摘要由CSDN通过智能技术生成

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)

在代码中,首先导入了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

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)

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

pip install PyPDF2 pdf2image

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

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

此代码将把每一页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)

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')
  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图片变成白底图实现抠图的一种常用方法是使用 OpenCV 库和 NumPy 库。下面是实现的具体步骤: 1. 导入库 ```python import cv2 import numpy as np ``` 2. 读取图片 ```python img = cv2.imread("image.jpg") # 读取图片 ``` 3. 将图片换为灰度图 ```python gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将图片换为灰度图 ``` 4. 将图片二值化 ```python _, binary = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY) # 将灰度图二值化 ``` 5. 反颜色 ```python binary = cv2.bitwise_not(binary) # 反颜色,使白底变成黑底 ``` 6. 将黑底图片换为白底图片 ```python white = np.zeros_like(img) # 创建一个与原图像大小相同,但所有像素值为0的数组 white.fill(255) # 将所有像素值设置为255,即变成白底 white[binary == 0] = img[binary == 0] # 将原图像中像素值为0的部分(即黑色部分)复制到白底图片中 ``` 7. 保存白底图片 ```python cv2.imwrite("white_bg_image.jpg", white) # 保存白底图片 ``` 完整代码如下: ```python import cv2 import numpy as np img = cv2.imread("image.jpg") # 读取图片 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将图片换为灰度图 _, binary = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY) # 将灰度图二值化 binary = cv2.bitwise_not(binary) # 反颜色,使白底变成黑底 white = np.zeros_like(img) # 创建一个与原图像大小相同,但所有像素值为0的数组 white.fill(255) # 将所有像素值设置为255,即变成白底 white[binary == 0] = img[binary == 0] # 将原图像中像素值为0的部分(即黑色部分)复制到白底图片中 cv2.imwrite("white_bg_image.jpg", white) # 保存白底图片 ``` 运行以上代码后,将生成一张白底图片,可以用于后续的抠图操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值