Python实现快速将pdf文件剪切成多个图片

 更新时间:2024年01月31日 14:18:17   作者:搬砖的诗人Z  
这篇文章主要为大家详细介绍了如何使用Python实现快速将pdf文件剪切成多个图片,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下

这里提供一个打包好的剪切包,window环境打开即可运行

import os
import fitz
import glob
import requests


os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

#剪切pdf为图片
def CutPdf(pdfPath,savePath,pdfSavePath):
	try:
		doc = fitz.open(pdfPath) #pdf路径
		for pg in range(doc.pageCount):
			page = doc[pg]
			rotate = int(0)
		    # 每个尺寸的缩放系数为2,这将为我们生成分辨率提高四倍的图像。
			zoom_x = 2.0
			zoom_y = 2.0
			trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
			pm = page.getPixmap(matrix=trans, alpha=False)
			imagePath = savePath + '%s.png' % str(pg + 1)
			pm.writePNG(imagePath) #最终存储路径
			newpdfPath = pdfSavePath + '%s.pdf' % str(pg + 1)
			print("剪切一张图片:" + str(pg + 1))
			frompic2pdf(imagePath,pdfSavePath,newpdfPath)
			print("转换成功一张pdf:" + str(pg + 1))
	except Exception as e:
		print('CutPdf出现异常:' + str(e))

#图片转pdf
def frompic2pdf(img_path,pdfSavePath, pdf_path):
	# 使用glob读图
	for img in sorted(glob.glob(img_path)):
		if not os.path.exists(pdfSavePath):
			 os.makedirs(pdfSavePath)
		
		# 打开空文档
		doc = fitz.open()
		# 打开指定图片
		imgdoc = fitz.open(img)
		# 使用图片创建单页的PDF
		pdfbytes = imgdoc.convertToPDF()
		imgpdf = fitz.open("pdf", pdfbytes)
		# 将当前页写入文档
		doc.insertPDF(imgpdf)
		# 保存为指定名称的PDF文件
		doc.save(pdf_path)
		# 关闭
		doc.close()


def main():
    pdfUrl = "cards"
    fileList = os.listdir(pdfUrl)
    index = 1
    for item in  fileList:
        print("开始裁剪" + item)
        url = pdfUrl + "/" + item

        foldStr = "images/" + item.split('.')[0]
        url2 = foldStr + "/" + item.split('.')[0]
        foldStr3 = "pdf/" + item.split('.')[0]
        url3 = foldStr3 + "/"
        if not os.path.exists(foldStr):
            os.makedirs(foldStr)

        CutPdf(url,url2,url3)
        print("完成裁剪")
        index+=1

if __name__ == "__main__":
    main()

知识补充

除了上文的方法,小编还为大家整理了其他Python裁剪pdf文件为图片的方法,希望对大家有所帮助

方法一:

剪裁PDF页面

在剪裁PDF页面之前,我们需要获取页面的尺寸,并计算剪裁区域的位置和大小。下面是剪裁PDF页面的代码:

# 获取页面尺寸
page_width = page.mediaBox.getWidth()
page_height = page.mediaBox.getHeight()

# 定义剪裁区域的位置和大小
x = 100  # 起始点的x坐标
y = 100  # 起始点的y坐标
width = 200  # 剪裁区域的宽度
height = 300  # 剪裁区域的高度

# 剪裁PDF页面
page.trimBox.lowerLeft = (x, y)
page.trimBox.upperRight = (x + width, y + height)
page.cropBox.lowerLeft = (x, y)
page.cropBox.upperRight = (x + width, y + height)

代码解析:

  • 使用mediaBox属性获取页面的宽度和高度。
  • 定义剪裁区域的位置和大小,可以根据实际需求进行调整。
  • 使用trimBox属性设置剪裁后的页面的边界框。
  • 使用cropBox属性设置剪裁后的页面的裁剪框。

保存剪裁后的图片

最后,我们需要将剪裁后的页面保存为图片。这可以通过使用PyPDF2库和Pillow库来实现。下面是保存剪裁后的图片的代码:

from PIL import Image

# 将剪裁后的页面保存为图片
with open('output.jpg', 'wb') as image_file:
    page_data = page.extract_xobject().get('/Im0').getData()
    image = Image.open(io.BytesIO(page_data))
    image.save(image_file, 'JPEG')

首先,导入Pillow库中的Image模块,用于处理图像。

  • 使用extract_xobject()方法从剪裁后的页面中提取图像数据。
  • 使用get('/Im0')方法获取图像数据。
  • 使用getData()方法获取图像的二进制数据。
  • 使用Image.open()方法打开图像数据。
  • 使用save()方法保存图像数据为JPEG格式的图片。
  • 'output.jpg'为保存的图片路径,可以根据需要修改。

方法二:

python分割pdf

from PyPDF2 import PdfFileReader, PdfFileWriter
 
 
# PDF文件分割
def split_pdf(read_file, out_detail):
    try:
        fp_read_file = open(read_file, 'rb')
        pdf_input = PdfFileReader(fp_read_file)  # 将要分割的PDF内容格式话
        page_count = pdf_input.getNumPages()  # 获取PDF页数
        print(page_count)  # 打印页数
 
        with open(out_detail, 'r',True,'utf-8')as fp:
            # print(fp)
            txt = fp.readlines()
            # print(txt)
            for detail in txt:  # 打开分割标准文件
                # print(type(detail))
                pages, write_file = detail.split()  # 空格分组
               #  write_file, write_ext = os.path.splitext(write_file)  # 用于返回文件名和扩展名元组
                pdf_file = r'C:\Users\GZTSALFIEL\Desktop\excel问题文件\pdf\\'+f'{write_file}.pdf'
                # liststr=list(map(int, pages.split('-')))
                # print(type(liststr))
                start_page, end_page = list(map(int, pages.split('-')))  # 将字符串数组转换成整形数组
                start_page -= 1
                try:
                    print(f'开始分割{start_page}页-{end_page}页,保存为{pdf_file}......')
                    pdf_output = PdfFileWriter()  # 实例一个 PDF文件编写器
                    for i in range(start_page, end_page):
                        pdf_output.addPage(pdf_input.getPage(i))
                    with open(pdf_file, 'wb') as sub_fp:
                        pdf_output.write(sub_fp)
                    print(f'完成分割{start_page}页-{end_page}页,保存为{pdf_file}!')
                except IndexError:
                    print(f'分割页数超过了PDF的页数')
        # fp.close()
    except Exception as e:
        print(e)
    finally:
        fp_read_file.close()
 
 
 
# def main():
#     fire.Fire(split_pdf)
#
# if __name__ == '__main__':
#     main()
 
split_pdf(r'..\pdfdocement\myfile.pdf', 'consult.txt')

到此这篇关于Python实现快速将pdf文件剪切成多个图片的文章就介绍到这了,更多相关Python将pdf剪切图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python基础教程之NumPy库的使用详解

    Python基础教程之NumPy库的使用详解

    NumPy(Numerical Python)是一个用于处理数组的Python库,学习机器学习的过程中先学会使用NumPy是非常重要的,所以本文就给大家详细介绍一下如何使用NumPy库,需要的小伙伴跟着小编一起来看看吧
    2023-07-07
  • Python openpyxl模块实现excel读写操作

    Python openpyxl模块实现excel读写操作

    这篇文章主要介绍了Python openpyxl模块实现excel读写操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python脚本实现代码行数统计代码分享

    Python脚本实现代码行数统计代码分享

    这篇文章主要介绍了Python脚本实现代码行数统计代码分享,本文给出了实现代码和使用方法及统计效果,需要的朋友可以参考下
    2015-03-03
  • Sublime Text v4.0(4143)安装方法

    Sublime Text v4.0(4143)安装方法

    这篇文章主要介绍了Sublime Text v4.0(4143)安装破解方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • python数组循环处理方法

    python数组循环处理方法

    今天小编就为大家分享一篇python数组循环处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python中json格式数据输出的简单实现方法

    python中json格式数据输出的简单实现方法

    下面小编就为大家带来一篇python中json格式数据输出的简单实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • python opencv人脸检测提取及保存方法

    python opencv人脸检测提取及保存方法

    今天小编就为大家分享一篇python opencv人脸检测提取及保存方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Python模型聚合查询\Q查询\F查询\分组查询操作技巧解析

    Python模型聚合查询\Q查询\F查询\分组查询操作技巧解析

    这篇文章主要介绍了模型查询中的一些操作技巧,主要包括模型聚合查询,Q查询,F查询,分组查询,有需要的朋友可以借鉴参考下,希望可以有所帮助
    2021-09-09
  • Python使用pyppeteer模块实现无头浏览器自动化

    Python使用pyppeteer模块实现无头浏览器自动化

    pyppeteer是一个基于Python的模块,它提供了一个高级的API,可以通过控制无头浏览器来实现自动化网页操作,下面我们就来看看Python如何使用pyppeteer模块实现无头浏览器自动化吧
    2024-02-02
  • Python三维绘图之Matplotlib库的使用方法

    Python三维绘图之Matplotlib库的使用方法

    这篇文章主要给大家介绍了关于Python三维绘图之Matplotlib库的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论