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

像WPS Office 一样处理pdf页面尺寸

1. 修改页面尺寸

import os
import shutil
import fitz  # PyMuPDFdef cm_to_px(cm):# 厘米转换成像素"""doc = fitz.open(input_file)page0 = doc[0]width_px = page0.mediabox.widthheight = page0.mediabox.heightprint(f'width_px:{width_px} height:{height}')"""import math# DPI 计算, 也可以通过计算得到# width_cm = 10  # cm     # wps office 页面属性显示的尺寸# width_px = 284.0  # px  # 程序读取的页面像素尺寸# DPI = int((width_px * 2.54) / width_cm) # 每英寸的像素数# print('DPI:', DPI)DPI = 72 # 72 DPI:通常用于网页图像,适合显示器上的低分辨率图像calculated_height_px = math.ceil((cm * DPI) / 2.54)print('calculated_height_px:', calculated_height_px)# print(cm * 72 / 2.54)return calculated_height_pxdef resize_pdf_pages(input_file, output_file, target_width=15, target_height=20):""":param input_file::param output_file::param target_width: 单位为厘米:param target_height: 单位为厘米"""# 将厘米转成像素target_width = cm_to_px(target_width)target_height = cm_to_px(target_height)doc = fitz.open(input_file)page0 = doc[0]width = page0.mediabox.widthheight = page0.mediabox.heightprint(f'width:{width} height:{height}')new_doc = fitz.open()  # 创建新文档for page in doc:# 创建新页面(指定目标尺寸)new_page = new_doc.new_page(width=target_width, height=target_height)# 计算源页面到目标页面的转换矩阵matrix = fitz.Matrix(target_width / page.rect.width,target_height / page.rect.height)print('matrix0:', matrix)width = page.mediabox.widthheight = page.mediabox.heightprint(f'width:{width} height:{height}')print(f'width:{width * 25.4 / 72} height:{height * 25.4 / 72}')print(page.mediabox)new_page.show_pdf_page(new_page.rect,  # 目标区域(使用整个新页面)doc,  # 源文档page.number  # 页码)new_doc.save(output_file)doc.close()new_doc.close()print(doc.is_closed)try:os.chmod(input_file, 0o777)os.remove(input_file)os.rename(output_file, input_file)return input_fileexcept Exception as e:print(e)return output_fileif __name__ == "__main__":# 修改pdf页面尺寸大小,例如将pdf页面尺寸修改成15cm*20cminput_pdf = r"C:\Users\EDY\Desktop\xxxxx\xxxx.pdf"output_pdf = input_pdf.replace('.pdf', '_1.pdf')resize_pdf_pages(input_pdf, output_pdf, 15, 20)

2. 将两个pdf拼接在一起


def merge_pages_vertically(page1, page2):"""将两个页面垂直合并(上下排列)Args:page1: 源页面1 (fitz.Page对象)page2: 源页面2 (fitz.Page对象)Returns:fitz.Document: 包含合并后页面的新文档"""# 1. 创建新文档new_doc = fitz.open()# 2. 计算新页面尺寸w1, h1 = page1.rect.width, page1.rect.heightw2, h2 = page2.rect.width, page2.rect.heightnew_width = max(w1, w2)new_height = h1 + h2# 3. 创建新页面new_page = new_doc.new_page(width=new_width, height=new_height)# 4. 定义目标区域rect_top = fitz.Rect(0, 0, new_width, h1)  # 顶部区域rect_bottom = fitz.Rect(0, h1, new_width, new_height)  # 底部区域# 5. 将源页面绘制到新页面(保留原始尺寸)new_page.show_pdf_page(rect_top, page1.parent, page1.number)new_page.show_pdf_page(rect_bottom, page2.parent, page2.number)return new_docdef merge_pdf(pdf1, pdf2, save_pdf):# 合并pdfdoc1 = fitz.open(pdf1)doc2 = fitz.open(pdf2)# 获取要合并的页面(此处选择第一页)page1 = doc1[0]page2 = doc2[0]# 垂直合并merged_doc = merge_pages_vertically(page1, page2)# 保存结果merged_doc.save(save_pdf)# 关闭文档doc1.close()doc2.close()merged_doc.close()if __name__ == "__main__":input_pdf = r"C:\Users\EDY\Desktop\xxxxx\xxxx.pdf"# 上下合并两个pdfsave_pdf = input_pdf.replace('.pdf', '_2.pdf')merge_pdf(input_pdf, input_pdf, save_pdf)

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

相关文章:

  • OpenGL 视差贴图
  • UVa11607 Cutting Cakes
  • Java垃圾回收器:从SerialGC到G1的演进/速通
  • 流程控制语句(1)
  • 如何检查 Linux 系统的内存使用情况
  • vue2实现背景颜色渐变
  • 【目标检测】论文阅读4
  • 分布式2PC理论
  • 大脑的藏宝图——神经科学如何为自然语言处理(NLP)的深度语义理解绘制新航线
  • (11)用于无GPS导航的制图师SLAM(一)
  • 【Android】原安卓生态发起网络GET请求 Post请求
  • 【87页PPT】智慧方案智慧校园智能化综合建设方案(附下载方式)
  • Linux操作系统—进程
  • 基于Prometheus Pushgateway与Alertmanager的自定义指标监控与告警实践指南
  • 【HTML】隐藏滚动条但保留功能
  • 年度优质会议推荐:【西安石油大学主办|IEEE出版|往届均EI】第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025)
  • Playwright进阶指南 (6) | 自动化测试实战
  • 从 GRIT 到 WebUI:Chromium 内置资源加载与前端展示的完整链路解析
  • 寻找AI——初识墨刀AI
  • 【FPGA】VGA显示-贪吃蛇
  • oracle 表空间扩容(增加新的数据文件)
  • 浅聊达梦数据库物理热备的概念及原理
  • VESA时序检测模块设计verilog实现
  • 力扣hot100:字母异位词分组和最长连续序列(49,128)
  • Ansible的介绍+ansible平台部署
  • 互联网大厂Java面试深度解析:从基础到微服务云原生的全场景模拟
  • 公开课程 | 大规模图数据管理与分析 第二讲:图的度量、性质与生成模型
  • redbook的判断完美数
  • 销售数据分析平台
  • LeetCode hot 100 每日一题(18)——206.反转链表