兰州网站建设hiteeth,wordpress老版编辑器,wordpress怎么写接口,不用下载就能看的网站的浏览器记录时间:2022年9月1日
PDF转图片库的使用和扩展
python有几个开源的免费的处理Pdf的库#xff0c;甚至有的已经有很完善的功能了。我发挥一下自己的所学#xff0c;看看能不能把它变为可用的一程序。
首先是了解PDF处理库PyMupdf#xff0c;这个库得到路径之后普就可以对…记录时间:2022年9月1日
PDF转图片库的使用和扩展
python有几个开源的免费的处理Pdf的库甚至有的已经有很完善的功能了。我发挥一下自己的所学看看能不能把它变为可用的一程序。
首先是了解PDF处理库PyMupdf这个库得到路径之后普就可以对pdf文件进行处理那么我要做的就是提供这一个文件的路径和输出的位置以及输出的一些设置命名之类的。这个库安装可以使用pip也可以在pycharm的插件里找。
plaintext 1pip install PyMuPDF读取路径
那么首先就让用户输入路径我们使用os.listdir(path)来获取文件和文件夹的列表这是不包括子文件夹内的咱们暂时不考虑子文件夹内的毕竟写完一个文件夹只要来一个递归内部文件夹也就是小菜一碟。当然在这一切之前要准备好我们要调用的库
plaintext 1
2import os
import fitz判断文件或文件夹
我们只对文件做处理,使用os.path.isdir(path)或者os.path.isfile(path)就可以判断文件或者文件夹了。注意这里的path参数要嘛是相对于py文件的相对路径要么就是绝对路径仅给出文件名或者文件夹名称是无法得到正确结果的会全部返回false
读取文件
读取pdf文件的流程和方法首先找到pdf文件读取PDF文件的元数据乃至于页面对每个页面进行操作再进行保存。
找到pdf很简单之前已经用os.listdir方法获得了文件列表并判断哪些是文件那么对属于文件的那些加入一个列表再进行后缀名的判断即可。这里使用
plaintext 1os.path.splitext(filename)[1]这个方法会将filename分成两个部分使用下标读取属于后缀名那一部分。判断这一部分是否为.pdf就号这里记录文件原本的文件名在后续输出结果重命名时会起作用。
那么判断为pdf文件之后就要进行操作。
打开文档是进行一切操作的基础这里我们使用fitz.open(filename)方法来打开一个文档同样必须是一个路径能让程序找到的路径。将打开文档返回值赋予一个变量即得到文档对象。
plaintext 1docfitz.open(filename)这时的文档对象具有一系列方法与属性:
plaintext 1
2
3
4
5doc.page_count #页数
doc.metadata #元数据
doc.get_toc() # 获取目录
doc.load_page(pno) #读取指定页面
#doc[pno] #读取页面的另一种方法元数据为一个充满描述数据的字典也就是键值对集合和我们的主题关系不大我们暂且不谈。获取目标目录或者说目标大纲也并非必要让我们进入pdf转图片最重要的一节页面的处理。
操作页面
必须先从文档对象里提取出页面才能进行操作提取页面可以用
plaintext 1
2doc.load_page(pno) #读取指定页面
#doc[pno] #读取页面的另一种方法这两个方法是一样的都是按页码获取页面甚至可以倒序进行。
当然了还有更高级的用法将文档作为页面的迭代器
plaintext 1
2
3
4
5
6
7
8
9
10for page in doc:# do something with page# ... or read backwards
for page in reversed(doc):# do something with page# ... or even use slicing
for page in doc.pages(start, stop, step):# do something with page那么获取了页面之后具体做什么操作呢
plaintext 1
2
3
4
5
6
7
8
9
10linkspage.get_links() #获取页面所有链接
for link in page.links(): #do sth
#这里是作为迭代器使用
#注释与表单同理
for annot in page.annots():# do something with annotfor field in page.widgets():# do something with field我们这里要进行的最重要的操作是得到页面的图像
plaintext 1pix page.get_pixmap()这个方法得到页面的RGB图像还有很多可以设定的参数
plaintext 1
2#创建RGBA图像即包含alpha通道也就是包含透明度通道
pixpage.get_pixmap(alphaTrue)关于get_pixmap()方法
plaintext 1
2
3
4
5
6
7
8
9
10
11
12
13
14如何提高图像分辨率
文档页面的图像由像素映射表示创建像素映射的最简单方法是通过方法 Page.get_pixmap。此方法有许多选项可以影响结果。其中最重要的是矩阵它可以让你缩放旋转扭曲或镜像结果。默认情况下Page.get_pixmap 将使用单位矩阵它不执行任何操作。在下文中我们将缩放系数 2 应用于每个维度这将生成分辨率高 4 倍也是大小约 4 倍的图像zoom_x 2.0 # horizontal zoom
zoom_y 2.0 # vertical zoom
mat fitz.Matrix(zoom_x, zoom_y) # zoom factor 2 in each dimension
pix page.get_pixmap(matrixmat) # use mat instead of the identity matrix
从版本 1.19.2 开始有一种更直接的方法来设置分辨率可以使用参数每英寸点数代替 。要创建页面的 300 dpi 图像请指定 。除了符号简洁之外此方法还具有 dpi 值与图像文件一起保存的额外优点 - 这在使用矩阵表示法时不会自动发生。dpimatrixpix page.get_pixmap(dpi300)具体的参数可以查阅官方手册也可以百度资料。
还可以使用page.get_svg_image()创建页面的矢量图像。
那么得到图像就要保存啊
plaintext 1
2pix.save(page-%i.png % page.number)
#这样就是直接用页面编码命名然后保存在和程序同一个目录下了其他方法例如获取页面文本图像之类的甚至可以搜索文本但在这里不是重点就是了。
plaintext 1
2text page.get_text(opt) #提取文字opt为选项
areas page.search_for(mupdf) #搜索文字那么到这整体流程就清楚了让我们开始程序编写吧