• 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 的安装和使用是

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

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

    PyMuPDF  的安装是这样子的

    pip install PyMuPDF

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

    PyMuPDF  的导入是这样子的

    import fitz

    PDF 各种处理

    拆分与提取

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

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

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

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

    其他功能请自行尝试

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

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

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

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

    合并多份文档

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

    python -m fitz join -h
    usage: fitz join [-h] -output OUTPUT [input [input ...]]
    
    ---------------------------- join PDF documents ---------------------------
    
    positional arguments:
    input           input filenames
    
    optional arguments:
    -h, --help      show this help message and exit
    -output OUTPUT  output filename
    
    specify 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 转换成图片

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

     1 import sys, fitz, os, datetime
     2 
     3 def pyMuPDF_fitz(pdfPath, imagePath):
     4     startTime_pdf2img = datetime.datetime.now()#开始时间
     5 
     6     print("imagePath="+imagePath)
     7     pdfDoc = fitz.open(pdfPath) # 打开文件
     8     for pg in range(pdfDoc.pageCount): # 遍历所有页面
     9         page = pdfDoc[pg]
    10         rotate = int(0) # 页面旋转角度
    11         # 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。
    12         # 此处若是不做设置,默认图片大小为:792X612, dpi=96
    13         zoom_x = 1.33333333 #(1.33333333-->1056x816)   (2-->1584x1224)
    14         zoom_y = 1.33333333
    15         mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
    16         pix = page.getPixmap(matrix=mat, alpha=False)
    17 
    18         if not os.path.exists(imagePath):#判断存放图片的文件夹是否存在
    19             os.makedirs(imagePath) # 若图片文件夹不存在就创建
    20 
    21         pix.writePNG(imagePath+'/'+'images_%s.png' % pg)#将图片写入指定的文件夹内
    22 
    23     endTime_pdf2img = datetime.datetime.now()#结束时间
    24     print('pdf2img时间=',(endTime_pdf2img - startTime_pdf2img).seconds)
    25 
    26 if __name__ == "__main__":
    27     pdfPath = './视觉工程师必须知道的工业相机50问.pdf'
    28     imagePath = './提取结果'
    29     pyMuPDF_fitz(pdfPath, imagePath)

    旋转 10 度的结果

    
    
  • 相关阅读:
    代码点与代码单元
    IIS最大并发连接数
    PhoneGap:JS跨域请求
    字符串长度
    android学习笔记:adb更换端口后成功启动
    java学习笔记:eclipse的workspace和working set
    java学习笔记:Eclipse打开现有项目
    java学习笔记:文件名区分大小写
    mysql学习笔记:存储过程
    mySql学习笔记:比sql server书写要简单
  • 原文地址:https://www.cnblogs.com/HZLS/p/13345429.html
Copyright © 2020-2023  润新知