如果要从PDF文件中抽取中文,建议直接使用光学文字识别(OCR)
安装三方库:pip install easyocr
import PyPDF2
from PyPDF2.pdf import PageObject
reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
page = reader.getPage(0) # type: PageObject
print(page.extractText())
2. 将PDF转成JPG图片
安装三方库:pip install fitz
import fitz
import os.path
def get_filename(file_path):
"""获取不带路径和后缀的文件名
:param file_path: 文件路径
:return: 文件名
"""
# 拆分路径和文件名
_, fullname = os.path.split(file_path)
# 拆分文件名和后缀
filename, _ = os.path.splitext(fullname)
return filename
def pdf_image(pdf_file, img_path, zoom_x=4, zoom_y=4, rotation_angle=0):
"""将PDF文件转成PNG图片
:param pdf_file: PDF文件路径
:param img_path: 保存图片的路径
:param zoom_x: 缩放比例(横向)
:param zoom_y: 缩放比例(纵向)
:param rotation_angle: 旋转角度
"""
# 打开PDF文件
pdf = fitz.open(pdf_file)
# 逐页读取PDF
for page_num in range(pdf.pageCount):
page_obj = pdf[page_num]
# 创建用于图像变换的矩阵
trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
# 将PDF页面处理成图像
pm = page_obj.getPixmap(matrix=trans, alpha=False)
temp = get_filename(pdf_file)
pm.writePNG(f'{img_path}{temp}_{page_num + 1}.png')
pdf.close()
def main():
if not os.path.exists('resources/images/'):
os.makedirs('resources/images/')
pdf_image('resources/XGBoost.pdf', 'resources/images/')
if __name__ == '__main__':
main()
3. 旋转和叠加页面
import PyPDF2
from PyPDF2.pdf import PageObject
reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
writer = PyPDF2.PdfFileWriter()
for page_num in range(reader.getNumPages()):
# 读取原文件
page_obj = reader.getPage(page_num) # type:PageObject
page_obj.rotateClockwise(90)
# 写入新文件
writer.addPage(page_obj)
blank_page = writer.addBlankPage() # type:PageObject
blank_page.rotateClockwise(90)
with open('resources/XGBoost_modified.pdf', 'wb') as file:
writer.write(file)
4. 加密PDF文件
writer.encrypt('python')
5. 添加水印
import PyPDF2
from PyPDF2.pdf import PageObject
reader = PyPDF2.PdfFileReader('resources/watermark.pdf')
wm_page = reader.getPage(0)
reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
writer = PyPDF2.PdfFileWriter()
for page_num in range(reader.getNumPages()):
# 读取原文件
page_obj = reader.getPage(page_num) # type:PageObject
page_obj.mergePage(wm_page)
writer.addPage(page_obj)
with open('resources/XGBoost_watermarked.pdf', 'wb') as file:
writer.write(file)
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas
pdf_canvas = canvas.Canvas('resources/demo.pdf', pagesize=A4)
width, height = A4
# 绘图
image = canvas.ImageReader('resources/guido.jpg')
pdf_canvas.drawImage(image, 20, height - 395, 250, 375)
# 显示当前页
pdf_canvas.showPage()
# 注册字体文件
pdfmetrics.registerFont(TTFont('Font1', 'resources/fonts/Action.ttf'))
pdfmetrics.registerFont(TTFont('Font2', 'resources/fonts/青呱石头体.ttf'))
# 写字
pdf_canvas.setFont('Font2', 40)
pdf_canvas.setFillColorRGB(0.9, 0.5, 0.3, 1) # 前面三个参数是电脑三原色,最后一个参数0-1是透明度(阿尔法通道)
pdf_canvas.drawString(width // 2 - 120, height // 2, '你好,世界!')
pdf_canvas.setFont('Font1', 40)
pdf_canvas.setFillColorRGB(0, 1, 0, 0.5)
pdf_canvas.rotate(18)
pdf_canvas.drawString(250, 250, 'hello, world!')
# 保存
pdf_canvas.save()
import os
# 列出所有文件和文件夹
for file in os.listdir():
# 判断是否是文件夹
if os.path.isdir(file): # isfile 是否是文件
print(os.listdir(file))
else:
_, suffix = os.path.splitext(file)
print(file, suffix)



