当前位置: 首页 > news >正文

淄博桓台网站建设报价钢筋网片规格型号

淄博桓台网站建设报价,钢筋网片规格型号,为爱表白网页设计模板素材,北京网站建设q479185700棒目录📑 1. 背景📑2. 源码模块解析📑2.1 读取PDF页数2.2 获取指定页的宽高尺寸2.3 裁剪单页PDF2.4 批量裁剪PDF 总结📑 1. 背景📑 接PyPDF2模块推荐博文中提到的实际需求(将银行网站下载来的多页且单页多张…

PyPDF2

目录📑

    • 1. 背景📑
    • 2. 源码模块解析📑
      • 2.1 读取PDF页数
      • 2.2 获取指定页的宽高尺寸
      • 2.3 裁剪单页PDF
      • 2.4 批量裁剪PDF
    • 总结📑

1. 背景📑

接PyPDF2模块推荐博文中提到的实际需求(将银行网站下载来的多页且单页多张回单的PDF裁剪成每张单据独立一个PDF文件),我决定将项目所做操作的模块化源码分享给大家

原PDF
原PDF

裁剪后PDF
原PDF

2. 源码模块解析📑

2.1 读取PDF页数

因为数据范围是动态的,所以每次处理的PDF页数也是不同的,操作一个回单PDF首先需要知道他有多少页

def get_page_num(pdf_path) -> int:"""获取PDF文件页数params:pdf_path: 需要读取页数的PDF文件路径return:_pages_count: PDF文件的页数"""with open(pdf_path, 'rb') as _pdf_file:# 读取PDF文件_pdf_file = PyPDF2.PdfReader(_pdf_file)# 获取总页数_pages_count = len(_pdf_file.pages)return _pages_count

2.2 获取指定页的宽高尺寸

裁剪前肯定需要知道原尺寸,然后根据原尺寸初步三等分,再做微调,最终实现银行回单的等分

def get_page_wh(pdf_path, page_num) -> list:"""获取PDF文件指定页的宽高数据params:pdf_path: 需要读取宽高的PDF文件路径page_num: 需要读取宽高的是哪一页,页码return:_width: PDF文件指定页的宽度_height: PDF文件指定页的高度"""with open(pdf_path, 'rb') as _pdf_file:# 读取PDF文件_pdf_file = PyPDF2.PdfReader(_pdf_file)# 获取PDF指定页信息_pdf_info = _pdf_file.pages[int(page_num) - 1]# 获取PDF指定页宽_width = float(_pdf_info.mediabox.width)# 获取PDF指定页高_height = float(_pdf_info.mediabox.height)return [_width, _height]

2.3 裁剪单页PDF

下面就是需求的核心功能——裁剪了(需要注意的是,我这里是根据需求将裁剪后的每一张回单放在同一个输出PDF文件中,如果需要每一张回单都为一个独立PDF文件,可以自行调整代码)

def split_pdf(input_path, output_path, page_num, upper_left, upper_right, lower_left, lower_right):"""裁剪指定单页PDF的区域,并另存为一个独立的文件到output_path注意:当PDF单页的 宽width < 高height 的时候,即文件是竖向的时候,左下角为坐标原点当PDF单页的 宽width > 高height 的时候,即文件是横向的时候,右下角为坐标原点params:input_path: 需要裁剪的PDF文件路径output_path: 输出路径page_num: 需要裁剪的是哪一页,页码upper_left: 裁剪区域的左上角坐标upper_right: 裁剪区域的右上角坐标lower_left: 裁剪区域的左下角坐标lower_right: 裁剪区域的右下角坐标"""with open(input_path, 'rb') as _input_file:# 读取PDF文件_input_file = PyPDF2.PdfReader(_input_file)# 创建输出PDF对象_that_page = PyPDF2.PdfWriter()# 获取PDF文件指定页对象_this_page = _input_file.pages[int(page_num) - 1]# 划定裁剪区域_this_page.mediabox.upper_left = tuple(upper_left)_this_page.mediabox.upper_right = tuple(upper_right)_this_page.mediabox.lower_left = tuple(lower_left)_this_page.mediabox.lower_right = tuple(lower_right)# 为输出PDF对象添加裁剪页_that_page.add_page(_this_page)with open(output_path, 'wb') as _output_file:# 将输出PDF对象写入输出路径文件_that_page.write(_output_file)

2.4 批量裁剪PDF

因为原需求是一个回单PDF中由格式相同的多页回单组成的,所以我直接写了一个批量裁剪整个多页PDF文件的函数(同样需要注意的是,我这里根据需求写的是将裁剪后的每一张回单放在同一个输出PDF文件中,如果需要每一张回单都为一个独立PDF文件,可以自行调整代码)

def batch_split_pdf(input_path, output_path, crop_area_list):"""循环PDF文件每一页,裁剪出每一页所有裁剪区域列表中指示的区域,并且裁剪后输出到同一个PDF文件内注意:当PDF单页的 宽width < 高height 的时候,即文件是竖向的时候,左下角为坐标原点当PDF单页的 宽width > 高height 的时候,即文件是横向的时候,右下角为坐标原点params:input_path: 需要裁剪的PDF文件路径output_path: 输出路径crop_area_list: 需要裁剪的区域列表(三维列表)"""with open(input_path, 'rb') as _input_file:# 读取PDF文件_input_file = PyPDF2.PdfReader(_input_file)# 获取总页数_pages_count = len(_input_file.pages)# 创建输出PDF对象_that_page = PyPDF2.PdfWriter()# 循环每一页for _page_num in range(_pages_count):# 循环要裁剪的区域列表for _crop_area in crop_area_list:# 获取PDF文件指定页对象_this_page = _input_file.pages[_page_num]# 划定裁剪区域_this_page.mediabox.upper_left = tuple(_crop_area[0])_this_page.mediabox.upper_right = tuple(_crop_area[1])_this_page.mediabox.lower_left = tuple(_crop_area[2])_this_page.mediabox.lower_right = tuple(_crop_area[3])# 为输出PDF对象添加裁剪页_that_page.add_page(_this_page)with open(output_path, 'wb') as _output_file:# 将输出PDF对象写入输出路径文件_that_page.write(_output_file)

总结📑

以上就是关于银行回单PDF裁剪需求涉及到的源代码了,抛砖引玉,大家可以根据自己更强的实力对代码做自己的个性化调整,冲💪!

http://www.dtcms.com/a/475380.html

相关文章:

  • 深圳真空共晶炉公司
  • 站长工具里查看的网站描述和关键词都不显示阿里云镜像wordpress
  • 潍坊地区网站制作官方网站的要素
  • 微信小程序一站式开发男女做羞羞羞的网站
  • 咸宁建设网站wordpress发表的文章在页面找不到
  • 松原市城乡建设局网站安阳论坛网
  • 佛山市官网网站建设怎么样建筑设计资料网站
  • 四川网站开发制作做新闻h5网站
  • 验证-SystemVerilog-数据类型、断言
  • 淘宝网站建设可以申请赔款建筑招工网站
  • 响水做网站德州做网站建设的公司哪家好
  • 建设银行纪念币预约网站神马网站快速排名软件
  • 打开网站代码中国机械加工网app
  • RFSOC 47DR PCIE板卡支持PCIE4.0
  • 建设厅网站给领导留言如何查看wordpress用户量上限
  • 「机器学习笔记11」深入浅出:解密基于实例的学习(KNN算法核心原理与实践)
  • 初识JAVA-1
  • 网络攻防技术:口令攻击
  • 综合评价-云模型 极简化软件操作+全流程方法介绍
  • 怎么开发网站平台公司网站后台密码
  • 网站目录文件查看万网网站制作
  • synchronized和reentrantlock区别?
  • 基于AHP-模糊综合评价法的工程实践能力评价
  • 同步语言Lustre的故事 —— 来自Lustre联合发明人的回顾(2005)
  • 华城建设集团有限公司官方网站wordpress背景设置
  • 依赖仓库搭建
  • 服装 东莞网站建设wordpress login 出错
  • 科普:Python 中, `return`与`yield` (及<generator object fibonacci at 0x.........>)
  • 站群服务器是什么意思源码下载网站推荐
  • 广东住房和城乡建设厅网站做网站建设优化的公司