win7 没有microsoft print to pdf_python 给 PDF 加水印

266c4222ad36cfab0e62d6ff83cc3fe5.png

如何用PythonPDF文件加水印?? 最后附源码连接。

建议下载一个Pycharm。 Pycharm可以方便下载第三方库。

开发环境

  • 操作系统:MAC
  • IDE:PyCharm

代码

此程序是:读取一个文件夹下一个Excel表格的数据,然后加载到PDF上。

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.units import cm
from PyPDF2 import PdfFileWriter, PdfFileReader
from pathlib import Path
import xlrd
import os
import shutil


# 注册中文字体
pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf'))


# 水印图片路径
picture_path = 'watermark.png'
# 未加水印的原始文件放在此folder中
folder_path = './original_file_folder'
# 文件输出路径。制作好的文件输出到这个文件夹中
out_put_path = './out_put_folder'
# 学生信息文件路径,
student_name_path= './student_list'
# 学生信息文件路径及文件名。手动建立一个excel表格,名字为:student name.xlsx.
# 里面存放水印文字信息
loc = student_name_path + '/student name.xlsx'
# 临时文件路径,
temp_file_path = './temp_file_folder'

#创建路径
Path(folder_path).mkdir(parents=True, exist_ok=True)
Path(out_put_path).mkdir(parents=True, exist_ok=True)
Path(student_name_path).mkdir(parents=True, exist_ok=True)
Path(temp_file_path).mkdir(parents=True, exist_ok=True)


# 读取Excel中的学生信息
wb = xlrd.open_workbook(loc)
sheet = wb.sheet_by_index(0)

# Extracting number of rows
for i in range(sheet.nrows):
    # skip the first row
    if i == 0:
        continue

    # retrieve student information
    student_info = sheet.cell_value(i, 0)
    #要生成的PDF文件名字 for example, 张三.pdf
    pdf_name = temp_file_path + '/' + student_info + '.pdf'

    c = canvas.Canvas(pdf_name)

    if student_info:
        c.setFontSize(22)
        c.setFont('SimSun', 36)
        # 指定填充颜色
        c.setFillColorRGB(0.6, 0, 0)
        # 设置透明度,1为不透明
        c.setFillAlpha(0.1)
        c.drawString(15, 15, student_info)

    if picture_path:
        c.translate(5 * cm, 2.5 * cm)
        c.rotate(45)
        c.drawImage(picture_path,  15, 15, 600, 120)

    # 生成临时的 pdf
    c.save()

    # 读取临时生成的 pdf
    watermark = PdfFileReader(open(pdf_name, "rb"))

    # 读取原始文件夹中的所有pdf
    for file in os.listdir(folder_path):
        if file.endswith(".pdf"):
            # 要输出的文件路径及名称
            output_file_name = file.split('.pdf')[0] + '_' + student_info + '_watermarked' + '.pdf'
            print('正在生成:' + output_file_name)
            print('请等待……')
            output_file = PdfFileWriter()
            input_file = PdfFileReader(open(folder_path + '/' + file, "rb"))

            page_count = input_file.getNumPages()
            for page_number in range(page_count):
                input_page = input_file.getPage(page_number)
                input_page.mergePage(watermark.getPage(0))
                output_file.addPage(input_page)

            # 要输出的文件路径及名称
            output_path = out_put_path + '/' + output_file_name
            with open(output_path, "wb") as outputStream:
                output_file.write(outputStream)
            print('生成:' + output_file_name)
            print('....................................................')

print('任务完毕')

# 删除临时生成的pdf
shutil.rmtree(temp_file_path)

github源码连接

MingqianYang/add_watermark_to_pdf​github.com
25ef09a03bc3910117bd892dd2427f3e.png

Enjoy!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值