admin管理员组

文章数量:1581592

今天遇上一个问题就是需要将几个pdf合并起来,我百度了一下有哪些方法可以做,可以先看下:

第一种:使用“iLovePDF”(在线端)

这是一个国外的免费在线PDF文件处理工具,它提供了PDF合并、PDF拆分、PDF压缩、PDF签名、旋转PDF、PDF转Word、PDF转Excel等服务,无需安装任何软件和插件,直接在线就能完成操作。官网地址在这里,首页截图如下所示:

 当然了也可以下载离线包本地安装也是可以的。

第二种:使用“全能PDF转换助手”(PC端)

这是一款多功能的PDF处理工具,它不仅支持Word、Excel、PPT、图片等多种文件格式与PDF格式之间的转换,还支持PDF合并、PDF分割、PDF加解密、PDF压缩、PDF编辑等功能。官网地址在这里,首页截图如下所示:

 我下载体验了一下结果发现直接就要收费,果断放弃了。

第三种:使用“PDF Converter”(在线端)

这是一个国外的在线PDF转换处理网站,它支持PDF转Excel、PDF转Word、PDF转PPT、PDF合并等功能,且该网站界面简洁,操作简单。不过它的转换效率比较慢,上传的文件需要等待几分钟才能转换成功。官方地址在这里,首页截图如下所示:

 这个我自己也体验了一下,速度奇慢无比,难以接受,放弃。

第四种:万能PDF转换器

跟全能PDF转换助手是类似的形式,这里就不再多介绍了,感兴趣的话可以自行使用,官方地址在这里,首页截图如下所示:

当然了可能还会有第五种第六种。。。,不过我已经不想再使用软件了,这里我选择基于Python来实现我的需求了,简单调研了一下发现的确是可行的。

第五种:基于Python的实现

我有一张图片,我手工操作将其转为了pdf文件,同时还有一个pdf文件,想要把这两个pdf文件进行合并,最开始我觉得我的查询思路错了,我一开始是想着怎么样一步到位将两个pdf文件合并,但是却没有想到,我本身第一个pdf文件就是一个图片,如果我可以将第二个pdf文件转化为图片,这时候两张图片转化为pdf文件岂不是很简单了吗?

想到这里,我的思路就打开了,只需要基于Python实现pdf文件转化提取为图像数据集即可,而Python正好就有这样的模块。就是fitz,可以直接pip安装,如下:

python3 -m pip install fitz

安装过程很顺利,但是import导入的时候报错如下:

No module named ‘frontend‘

查了一下说的是fitz依赖于PyMuPDF模块,于是我又开始安装PyMuPDF模块,结果pip安装一直报奇怪的错误,去查了一下现成的wheel文件也是没有的,很无奈,后来在一篇文章里面看到需要安装的时候指定好版本号,于是我又重新试了一下果然可以了,如下:

python3 -m pip install PyMuPDF==1.16.14

执行上面的安装命令即可安装成功,之后就是基于fitz模块开发转化程序了。

源码实现如下所示:

#!usr/bin/env python
# encoding:utf-8
from __future__ import division



"""
__Author__:沂水寒城
功能: pdf转png
"""



import os
import fitz




def pdf2Png(pdfPath, name, zoom_x, zoom_y, rotation_angle, saveDir):
    """
    pdf文件转为png文件
    """
    if not os.path.exists(saveDir):
        os.makedirs(saveDir)
    pdf = fitz.open(pdfPath)
    # 逐页读取pdf
    for page_num in range(0, pdf.pageCount):
        print("Parse And Transfome Page: ", page_num)
        page = pdf[page_num]
        # 设置缩放和旋转系数
        trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
        p2p = page.getPixmap(matrix=trans, alpha=False)
        p2p.writePNG(saveDir + name + "_" + str(page_num) + ".png")
    pdf.close()




if __name__ == "__main__":


    print(
        "===================================Loading PDF2PNG==================================="
    )

    saveDir = "data/"
    pdf2Png("雷军刷屏,难掩互联网低谷.pdf", "lbs", 1, 1, 0, saveDir)

上面的pdf2Png函数即可实现我的需求,接下来简单测试验证一下。

我随机打开百度,选择了一篇新闻,链接在这里,首页截图如下所示:

 终端执行输出如下所示:

代码运行成功后会自动本地创建data目录,存储所有的图像数据,如下所示:

 我给每页pdf转化得到图片命名的前缀是lbs[雷布斯],后面的数字是在原始pdf文件中的页码,我们来简单看下:

lbs_0.png

 lbs_1.png

 lbs_2.png

 lbs_3.png

 lbs_4.png

 完美转化提取,记录一下,希望可以帮到有需要的人。

本文标签: 实用功能文件数据图片Python