使用python将pdf转为图片以及将图片转为pdf

受人所托,将一份pdf的水印去掉,找了许多软件,哎,都是收费的,被逼绝境,决定使用python来完成这一壮举。

具体思路如下:

  1. 将pdf 转为图片
  2. 去除图片中的水印部分
  3. 将图片转为pdf

下面逐步介绍

1. 使用python 将pdf 转为图片

import os
from pdf2image import convert_from_path, convert_from_bytes
import tempfile
from pdf2image.exceptions import (
    PDFInfoNotInstalledError,
    PDFPageCountError,
    PDFSyntaxError
)


def pdf2image2(pdfPath, imagePath, pageNum=10):
    images = convert_from_path(pdfPath, poppler_path=r'C:\Users\zhangdongsheng\Downloads\poppler-0.68.0_x86\poppler-0.68.0\bin')
    for image in images:
        if not os.path.exists(imagePath):
            os.makedirs(imagePath)
        image.save(imagePath + '/' + '%s.jpg' % images.index(image), 'JPEG', quality=95)

pdf2image2('C:/Users/zhangdongsheng/Desktop/有水印.pdf', 'C:/Users/zhangdongsheng/Desktop/pdf_image')

需要安装pdf2image ,同时windows环境下需要下载一个名为popple的软件,下载地址为https://blog.alivate.com.au/poppler-windows/。

转为图片后,惊喜的发现图片里没有水印了,这应该和水印的制作方法有关,因此本文的第二部分,我并没有验证

2. 去除图片里的水印

这一步操作,我是参考了这篇文章: https://jishuin.proginn.com/p/763bfbd65862

文章里介绍的方法,从理论上是可以去除水印的,具体效果如何,由于pdf转为图片后水印自动消息,我没有验证,感兴趣的朋友可以自行验证。

3. 图片转为pdf

使用python 将图片转为pdf,需要安装fpdf模块,转换的方法也比较简单,需要注意的是,在使用pdf的image方法添加图片时一定要注意顺序,我将图片以数字进行命名,根据数值大小的顺序添加图片到pdf里,保证pdf的内容是有序的

import os
from fpdf import FPDF

pdf = FPDF()
pdf.set_auto_page_break(0)         # 自动分页设为False

path = 'C:/Users/zhangdongsheng/Desktop/pdf_image'
imagelist = [i for i in os.listdir(path)]
imagelist = [(int(item[:item.index(".")]), item) for item in imagelist]

imagelist = sorted(imagelist, key=lambda x: x[0])
for image in imagelist:
    pdf.add_page()
    pdf.image(os.path.join(path, image[1]), w=196, h=285)      # 指定宽高

pdf.output(os.path.join('C:/Users/zhangdongsheng/Desktop', "无水印.pdf"), "F")

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案