先说问题,如图,要把红框的内容去除:

比较容易想到的办法是图片操作,
1.先把PDF文件转化为图片,
2.新建一张空白图片,
3.把空白图片粘贴到pdf转化的图片上,覆盖内容。
4.最后再把图片转化为PDF。
部分关键代码如下:
import pdf2image
import img2pdf
from PIL import Image
# 输出单个pdf
#file_name pdf名字
#pdf_name 保存的pdf名字
def Out_pdf_single(file_name, pdf_name):
pdf_imgs = []
file = open("./pdf/" + pdf_name, "wb")
images = pdf2image.convert_from_path(file_name, poppler_path='./poppler-0.68.0/bin')
for idx, img in enumerate(images):
path = '{}.jpg'.format(idx)
%只处理单页数pdf
if idx % 2 == 0:
# 判断样式 并 处理图片
# 样式6 左上角C(73,50)
img_arr = img.load()
if img_arr[74, 49] <= (50, 50, 50):
print('样式6')
# 130 285 - 862 466
# 创建空白图像
img_white = Image.new('RGB', (732, 181), (255, 255, 255))
# 粘贴
img.paste(img_white, (131, 286))
else:
print("样式1")
# 165 323 - 896 504
# 创建空白图像
img_white = Image.new('RGB', (731, 181), (255, 255, 255))
# 粘贴
img.paste(img_white, (165, 323))
# 保存图片
img.save(os.path.join('./img/', path), 'JPEG', quality=10)
# 添加到imgs
pdf_imgs.append(os.path.join('./img/', path))
# 保存为pdf
pdf_bytes = img2pdf.convert(pdf_imgs)
file.write(pdf_bytes)
file.close()
图片操作最后得到的PDF文件会很多,原始PDF文件100KB,转化后变成大概4M。
所以下面又换了一种方法,给PDF添加水印的方式添加图片。
1.制作水印PDF(新建一个空白图像,新建一页PDF,把图像插入到PDF,这个pdf看上去是空白的,实际上背景是透明的,然后上面有一张空白图片,可以用来覆盖要删除的内容)
2.给要去除内容的PDF添加水印(用到了PyPDF2的包)
要安装的话,要注意一下大小写。
pip install PyPDF2
部分关键代码如下:
from PyPDF2 import PdfFileWriter, PdfFileReader
#给pdf批量加水印
#input_pdf = '.PDF',输入文件
#output = '.pdf',输出pdf
#watermark = '.pdf'水印文件
def create_watermark(input_pdf, output, watermark):
watermark_obj = PdfFileReader(watermark)
watermark_page = watermark_obj.getPage(0)
pdf_reader = PdfFileReader(input_pdf)
pdf_writer = PdfFileWriter()
# 给所有页面添加水印
for page_num in range(pdf_reader.getNumPages()):
print("page:",page_num)
page = pdf_reader.getPage(page_num)
if page_num%2 == 0:
page.mergePage(watermark_page)
pdf_writer.addPage(page)
with open(output, 'wb') as out:
pdf_writer.write(out)
#调用示例
create_watermark(
input_pdf = 'y8.PDF',
output = 'y8_style.pdf',
watermark = 'style.pdf')
效果展示:
这里其实有一张空白图片,但正常看没什么问题。

本文介绍两种高效去除PDF中特定内容的方法:一是通过图片操作,将PDF转换为图片,使用空白图片覆盖不需要的内容后再转回PDF;二是利用PyPDF2包,通过添加带有空白图片的水印来遮盖目标内容,此法更轻便,不会显著增加文件大小。

1592

被折叠的 条评论
为什么被折叠?



