5 python 页面说明_PDF 的各种操作,我用 Python 来实现(附网站和操作指导)

news/2024/5/14 2:13:13/文章来源:https://blog.csdn.net/weixin_39929566/article/details/112740859

导言

PDF 处理是日常工作中的常见需求,包括 PDF 合并、删除、提取等。更复杂的任务如:将 PDF 转换成 图像。

下面通过几个简单的例子和一份代码,帮助大家解决上面的需求,操作非常简单。

在文末我会提供一份源码和一个神奇的 PDF 处理网站帮你解决 PDF 处理的烦恼。

PyMuPDF 介绍

为什么使用 Python,那还不是 Python 有着强大的第三方工具包,我们想要的功能兴许就有。

PyMuPDF 就是我们需要的工具,官方文档对他的简介是

PyMuPDF 是针对 MuPDF 的 Python 绑定,它是一个轻量级 PDF 和 XPS 查看器。MuPDF 可以访问 PDF,XPS,OpenXPS,CBZ(漫画书档案),FB2 和 EPUB(电子书)格式的文件。这些是扩展名为.pdf,.xps,.oxps,.cbz,.fb2 或.epub 的文件(因此您可以使用 Python 开发电子书查看器)。

官方文档:https://pymupdf.readthedocs.io/en/latest/intro.html

这里有个细节需要说明的是,Python 的第三方包一般是安装的名称和导入的名称是一样的,比如 numpy 的安装和使用是

pip install numpy # numpy 包的安装import numpy  # numpy 包的导入

但是对于 PyMuPDF 这个包就不一样了,安装和使用的包名是不一样的,这个是历史遗留下来的原因,知道有这回事就行。

PyMuPDF 的安装是这样子的

pip install PyMuPDF
357a96b0ba5c64664ab724d7eb1624de.png

PyPI 源:https://pypi.org/project/PyMuPDF/

PyMuPDF 的导入是这样子的

import fitz
ff416b00ba14a86b40c1cd10dc29335c.png

PDF 各种处理

拆分与提取

拆分与提取 PDF 文件的,使用的是 clean 命令,同时该命令也可以用于文档加密,压缩、删除页面等操作,基本说明如下:

python -m fitz clean -husage: fitz clean [-h] [-password PASSWORD]                [-encryption {keep,none,rc4-40,rc4-128,aes-128,aes-256}]                [-owner OWNER] [-user USER] [-garbage {0,1,2,3,4}]                [-compress] [-ascii] [-linear] [-permission PERMISSION]                [-sanitize] [-pretty] [-pages PAGES]                input output-------------- optimize PDF or create sub-PDF if pages given --------------positional arguments:input                 PDF filenameoutput                output PDF filenameoptional arguments:-h, --help            show this help message and exit-password PASSWORD    password-encryption {keep,none,rc4-40,rc4-128,aes-128,aes-256}                      encryption method-owner OWNER          owner password-user USER            user password-garbage {0,1,2,3,4}  garbage collection level-compress             compress (deflate) output-ascii                ASCII encode binary data-linear               format for fast web display-permission PERMISSION                      integer with permission levels-sanitize             sanitize / clean contents-pretty               prettify PDF structure-pages PAGES          output selected pages, format: 1,5-7,50-N

以下命令只需在终端运行即可:

参数:2-N 代表去除第一页

python -m fitz clean -sanitize -pages 2-N F:视觉工程师必须知道的工业相机50问.pdf F:去除第一页.pdf

其他功能请自行尝试

提取字体和图像(非 PDF 页面)

将字体或图像从选定的 PDF 页面提取到所需目录,基本说明如下:

python -m fitz extract -husage: fitz extract [-h] [-images] [-fonts] [-output OUTPUT] [-password PASSWORD]                    [-pages PAGES]                    input--------------------- extract images and fonts to disk --------------------positional arguments:input                 PDF filenameoptional arguments:-h, --help            show this help message and exit-images               extract images-fonts                extract fonts-output OUTPUT        output directory, defaults to current-password PASSWORD    password-pages PAGES          only consider these pages, format: 1,5-7,50-N

将 视觉工程师必须知道的工业相机50问.pdf 文件中的图片和字体提取到 提取结果 文件夹中

python -m fitz extract -images -fonts -output F:提取结果 F:视觉工程师必须知道的工业相机50问.pdfsaved 9 fonts to 'F:提取结果'saved 6 images to 'F:提取结果'
f6fc2ed2bc7232aee77536f7d6440303.png

合并多份文档

合并多份 PDF 文档,使用的是 join 命令,可以指定页面进行合并,同时需要关注 PDF 是否需要密码才能打开,基本说明如下:

python -m fitz join -husage: fitz join [-h] -output OUTPUT [input [input ...]]---------------------------- join PDF documents ---------------------------positional arguments:input           input filenamesoptional arguments:-h, --help      show this help message and exit-output OUTPUT  output filenamespecify each input as 'filename[,password[,pages]]'

以下命令只需在终端运行即可:合并两份文档的全部

python -m fitz join -output "F:合并两份文档.pdf" "F:视觉工程师必须知道的工业相机50问.pdf" "F:Modern CMake文档.pdf"

合并两份文档的部分,选择 视觉工程师必须知道的工业相机50问 文件的第一页和 Modern CMake文档.pdf 的 5 到最后一页进行合并,下面语句中有两个 ,, 是因为要合并的文档不需要密码,如果需要密码,就把两个逗号替换成 密码即可。

  • 5-N 代表第五页开始到文档的末尾
python -m fitz join -output F:合并两份文档.pdf F:视觉工程师必须知道的工业相机50问.pdf,,1 "F:Modern CMake文档.pdf",,5-N

PDF 转换成图片

这个功能没办法像上面那样一个命令就能解决,不过通过查看文档,我们也不难写出代码

import sys, fitz, os, datetimedef pyMuPDF_fitz(pdfPath, imagePath):    startTime_pdf2img = datetime.datetime.now()#开始时间    print("imagePath="+imagePath)    pdfDoc = fitz.open(pdfPath) # 打开文件    for pg in range(pdfDoc.pageCount): # 遍历所有页面        page = pdfDoc[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.getPixmap(matrix=mat, alpha=False)        if not os.path.exists(imagePath):#判断存放图片的文件夹是否存在            os.makedirs(imagePath) # 若图片文件夹不存在就创建        pix.writePNG(imagePath+'/'+'images_%s.png' % pg)#将图片写入指定的文件夹内    endTime_pdf2img = datetime.datetime.now()#结束时间    print('pdf2img时间=',(endTime_pdf2img - startTime_pdf2img).seconds)if __name__ == "__main__":    pdfPath = './视觉工程师必须知道的工业相机50问.pdf'    imagePath = './提取结果'    pyMuPDF_fitz(pdfPath, imagePath)

旋转 10 度的结果

348c27c52cae493c850baf4f1ab6c2e7.png

神奇的网站明天再放出,哈哈哈~~~

以上就是 PDF 处理的几个常用功能,希望能够帮到你,喜欢的朋友感谢三连~~~

参考:

  • https://pymupdf.readthedocs.io/en/latest/index.html
  • https://www.jianshu.com/p/f57cc64b9f5e

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_750373.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php源码仿三一重工,织梦仿三一重工大气企业网站PHP源码

模板介绍源码名称:仿三一重工大气企业网站PHP源码模仿三一重工企业网站PHP源码,测试是完整和无错的,与主流浏览器兼容。模板包含安装说明和测试数据。这个模板是基于DEDE的CMS 5.7GBK设计的。如果需要UTF-8版本,请自己转换。模板的…

我的世界服务器linux网站,Ubuntu架设Minecraft服务器

Minecraft是非常流行的沙盒游戏,为了和几个朋友一起玩这个游戏,我需要一个属于自己的虚拟世界,自己的Minecraft服务器。我在DigitalOcean的vps上架设Minecraft服务器,如果你只需在局域网内游戏,使用本地主机即可。下面…

在阿里云部署 Hexo 网站

一开始自己的网站 leehao.me 托管在 GitHub 上面,考虑到 GitHub 的访问可能不稳定,另外,也是抱着学习的目的,就将网站迁移到阿里云上面来了。 网站的总体结构如下图所示: 域名 leehao.me 指向负载均衡 SLB&#xff08…

Hexo 网站配置免费阿里云证书

原来的个人网站 leehao.me 使用了阿里云的负载均衡服务,因此 HTTPS 证书也是部署在负载均衡服务器上。文章《在阿里云部署 Hexo 网站》介绍了采用负载均衡方式来部署网站的方法。 考虑到网站访问流量不高且为了减少费用,决定不再使用负载均衡服务&#…

Hexo 网站支持 HTTP/2

HTTP/2 具有以下的特性: 采用二进制传输数据基于流的多路复用头部压缩服务端推送 由于 HTTP/2 可以提升网站访问速度,因此,本人决定对个人站点 Leo 的博客 进行 HTTP/2 升级改造。 leehao.me 网站采用 Ngninx Hexo NexT 实现&#xff0c…

php网站设置不可复制,css如何实现禁止文本被选中,禁止复制?(代码示例)

在前端开发中,有时会出现这样一种情况:双击文字后,文字就会被选中,特别丑,一点也不美观,也很不方便;而且有时候在某些网页模块上我们就是就是需要文字不可以被选中或复制。那么如何实现这种需求…

拔错电源,导致网站宕机 24 小时

黑客技术点击右侧关注,了解黑客的世界!推荐↓↓↓ 长按关注?【16个技术公众号】都在这里!涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Andr…

某程序员上线原谅宝:抓取全球不可描述网站和社交平台10万渣女

黑客技术点击右侧关注,了解黑客的世界!Linux编程点击右侧关注,免费入门到精通!程序员严选甄选正品好物,程序员生活指南!来源丨工程狮一图https://www.jianshu.com/p/29a69e0ad28b 要想生活过得去&#xf…

使用华为云服务器搭建一个简单网站

云服务器 公网IP:121.36.0.156 私有IP:192.168.0.231 我拥有的云资源

苹果在其隐私网站新增标签,聚合所有应用隐私信息

????????关注后回复 “进群” ,拉你进程序员交流群????????Apple近日在其隐私网站上新增了一个新的“标签”,该部分将所有 Apple 应用程序的隐私标签集中在一起,从而使用户更容易了解 Apple 应用程序如何处理其个人数据。自去…

给网站「二十次幂」新增了一个小功能

登录注册功能是在上个版本实现的,其实是为这个版本做的铺垫,此功能并不是我个人YY出来的,主要是为了满足用户只想看某些特定公众号发布的内容而开发的,同时为了避免新注册用户没有关注任何账号导致关注列表没有内容,平…

StackOverflow 网站被攻击!

‍哈哈,如果你是被标题吸引进来了,别惊讶,今天是愚人节。码农最常用的三大网站之一 StackOverflow 网站昨天开始开启了愚人节模式,整个网站风格回到了远古时代,浓浓的 Flash Style,鼠标移动特效、跑马灯效果…

知名网站的 404 页面长啥样?

????????关注后回复 “进群” ,拉你进程序员交流群????????来自:程序猿(微信号:imkuqin)每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网…

做个网站被起诉赔300万!

V2EX有条求助帖,大概内容是作者做了个专门提供电子书下载的网站,然后被出版社要求索赔300万,这个赔款算不算勒索式赔款不在本文讨论范围内。根据描述,他似乎完全不知道自己干的这个事是违法的。而他不仅利用网站传播盗版还以此来盈…

只需五步!哈佛学霸教你用Python分析相亲网站数据,在两万异性中找到真爱

大数据文摘出品来源:Wired编译:啤酒泡泡、张大笔茹、张睿毅、牛婉杨想脱单?那还不容易!如果身在美国,就像其余四千万单身男人一样,注册一下Match.com, J-Date和OkCupid等相亲网站,坐等真爱上门不…

我顺藤摸瓜端了色情网站的老窝,并劝他从良

感谢凌云给我的启发大家好,我是九歌前几天无意发现了一个色情网站,本着除暴安良的心态,直接开始对这个网站开始了调查这个网站的域名是.cn结尾的 【.cn是国内域名,无法隐藏注册人的信息】我去站长之家里面对这个网站进行Whois查询按照惯例这种…

为什么你的Python包老是装不上?收下这个网站就对了

Python以第三方包丰富而著称,你想要的功能都能通过pip命令安装,避免什么都要自己重新造轮子尬尴。但是pip安装有两个常见问题,第一是下载慢,第二是无法安装。慢的原因是资源服务器放在大洋彼岸的美帝,无法安装多半因为…

苹果推出重新设计的开源项目主题网站

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇技术编辑:61丨发自 思否编辑部公众号:SegmentFault苹果近日上线了经过重新设计的开源主页 ,该网站容纳了所有现存的苹果的开源工作…

这6个打开眼界的网站,一定有你不知道的

大家好,我是军哥我平常喜欢逛各种新奇网站,喜欢尝鲜各种工具。分享5个大开眼界的网站给你,里面或许就有你不知道的。1、Product HuntProduct Hunt是一个供用户分享和发现产品的网站,你可以在上面发现很多有趣的APP,软件…

gitlab - 解决访问 gitlab 网站出现 502 报错信息的问题

问题背景 访问 gitlab 网站,出现 502 解决方案 先查看运行 gitlab 容器的 id docker ps运行命令 # 容器里启动服务 docker exec id gitlab-ctl reconfigure# 关闭防火墙 systemctl stop firewalld再次访问 gitlab 网站就能成功啦