Conseils | Filigrane des informations sensibles avec python

Conseils | Filigrane des informations sensibles avec python

Le filigrane n'est pas inconnu de tout le monde, mais beaucoup de gens sont paresseux pour l'ajouter, et la plupart des gens ne pensent pas que c'est nécessaire. Mais pour les informations sensibles comme les cartes d'identité, ma recommandation personnelle est de créer un filigrane.Bien que pour la technologie actuelle, le tatouage ne soit qu'une question de minutes, mais c'est mieux que de ne pas imprimer!

Il existe de nombreux logiciels de filigrane sur le marché. Il existe des logiciels gratuits et payants. La plupart des logiciels gratuits sont des versions Web. Ces informations doivent être téléchargées. Bien que de nombreux sites Web contiennent des informations écrites, ils ne les enregistreront jamais. Quiconque les connaît saura. Ceci est un anneau de vol, la charge est similaire à WPS, vous devez ouvrir un membre pour utiliser sa fonction.

那对于像我这种不想上传到别人的网站,使用频率不高,开会员也不划算的人来说,还是写个小脚本来做这个事情。下面附上代码,代码很短,使用也很简单。
import os
from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

# 文件保存目录
BASE_DIR = 'E:\\pdf'

# 添加中文字体
font_dir = os.path.join(BASE_DIR, "msyh.ttc")
pdfmetrics.registerFont(TTFont('msyh', font_dir))

def create_watermark(content):  
    """创建PDF水印模板 
    """  
    watermark_pdf = os.path.join(BASE_DIR, 'watermark.pdf')
    # 使用reportlab来创建一个PDF文件来作为一个水印文件   
    c = canvas.Canvas(watermark_pdf, pagesize= (30*cm, 30*cm))  
    c.translate(10*cm, 5*cm) 
    # 设置字体
    c.setFont('msyh', 80)

    # 设置水印文件  
    c.saveState()   
    c.translate(300, 15)   
    # 设置不透明度
    c.setFillAlpha(0.3)
    # 旋转45度
    c.rotate(45)
    # 水印文字  
    c.drawString(-10*cm, 0*cm, content)
    c.drawString(-10*cm, 6*cm, content)
    c.drawString(-10*cm, 12*cm, content)
    c.drawString(-10*cm, 18*cm, content)
    c.restoreState()   
    # 保存水印文件  
    c.save()  
    pdf_watermark = PdfFileReader(open(watermark_pdf, "rb"))
    return pdf_watermark

#所有路径为绝对路径
def add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):
    pdf_output = PdfFileWriter()
    input_stream = open(pdf_file_in, 'rb')
    pdf_input = PdfFileReader(input_stream)

    # 获取PDF文件的页数
    pageNum = pdf_input.getNumPages()
    #读入水印pdf文件
    pdf_watermark = pdf_file_mark
    # 给每一页打水印
    for i in range(pageNum):
        page = pdf_input.getPage(i)
        page.mergePage(pdf_watermark.getPage(0))
        page.compressContentStreams()   #压缩内容
        pdf_output.addPage(page)
    pdf_output.write(open(pdf_file_out, 'wb'))

if __name__ == "__main__":
    # 创建水印
    pdf_file_mark = create_watermark("个人证件禁止商业用途")
    # 需要打水印的pdf
    pdf_file_in = os.path.join(BASE_DIR, "身份证.pdf")
    # 打完水印后的文件
    pdf_file_out = os.path.join(BASE_DIR, "水印身份证.pdf")
    add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out)

Instructions:

(1), pdf_file_mark = create_watermark ("L'identifiant personnel est interdit pour un usage commercial"), remplacez simplement le texte du filigrane qui doit être imprimé;

(2), pdf_file_in = os.path.join (BASE_DIR, "ID card.pdf"), fichiers qui doivent être filigranés, enregistrez ces informations d'image sous forme de fichiers PDF;

(3), pdf_file_out = os.path.join (BASE_DIR, "Watermark ID Card.pdf"), le fichier après le filigrane;

Exemple:

L'image avant le filigrane est la suivante:

Conseils | Filigrane des informations sensibles avec python

Une fois le filigrane terminé, c'est comme suit:

Conseils | Filigrane des informations sensibles avec python

L'opération est-elle très simple? J'espère utile pour vous!

Je suppose que tu aimes

Origine blog.51cto.com/15080014/2654776
conseillé
Classement