Consejos | Marca de agua la información confidencial con Python

Consejos | Marca de agua la información confidencial con Python

La marca de agua no es desconocida para todos, pero a muchas personas les da pereza agregarla, y la mayoría de la gente no cree que sea necesaria. Pero para información sensible como tarjetas de identificación, mi recomendación personal es la marca de agua. Aunque para la tecnología actual, la marca de agua es cuestión de minutos, ¡pero es mejor que no imprimir!

Hay muchos programas de marca de agua en el mercado. Hay programas gratuitos y de pago. La mayoría de los gratuitos son versiones web. Esta información debe cargarse. Aunque muchos sitios web tienen información escrita, nunca guardarán la información del usuario. Cualquiera que la conozca Este es un anillo de robo, el cargo es similar al de WPS, necesitas abrir un miembro para usar su función.

那对于像我这种不想上传到别人的网站,使用频率不高,开会员也不划算的人来说,还是写个小脚本来做这个事情。下面附上代码,代码很短,使用也很简单。
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)

Instrucciones:

(1), pdf_file_mark = create_watermark ("La identificación personal está prohibida para uso comercial"), simplemente reemplace el texto de la marca de agua que debe imprimirse;

(2), pdf_file_in = os.path.join (BASE_DIR, "ID card.pdf"), archivos que necesitan marca de agua, guarde esta información de imagen como archivos PDF;

(3), pdf_file_out = os.path.join (BASE_DIR, "Watermark ID Card.pdf"), el archivo después de la marca de agua;

Ejemplo:

La imagen antes de la marca de agua es la siguiente:

Consejos | Marca de agua la información confidencial con Python

Una vez finalizada la marca de agua, es como sigue:

Consejos | Marca de agua la información confidencial con Python

¿La operación es muy sencilla? ¡Espero les sea de utilidad!

Supongo que te gusta

Origin blog.51cto.com/15080014/2654776
Recomendado
Clasificación