import fitz # PyMuPDF
from PIL import Image, ImageDraw, ImageFont
import datetime
# Setări generale
input_pdf = "document2.pdf"
output_pdf = "document_fara_print.pdf"
watermark_text = "TEXT"
font_size_ratio = 0.01 # proporție din lățimea paginii
text_color = (255, 0, 0, 40) # roșu opac (maxim de protecție)
# Deschidem PDF-ul
pdf = fitz.open(input_pdf)
images = []
for page_num in range(len(pdf)):
# Convertim pagina în imagine (300 dpi)
pix = pdf[page_num].get_pixmap(dpi=300)
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples).convert("RGBA")
# Pregătim fontul
font_size = int(img.width * font_size_ratio)
try:
font = ImageFont.truetype("arial.ttf", font_size)
except:
font = ImageFont.load_default()
# Layer transparent pentru watermark
watermark_layer = Image.new("RGBA", img.size, (0, 0, 0, 0))
draw_wm = ImageDraw.Draw(watermark_layer)
# Dimensiune text
bbox = draw_wm.textbbox((0, 0), watermark_text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
# Pas între repetiții
step_x = text_width + 200
step_y = text_height + 200
# Desen watermark repetat
for y in range(-img.height, img.height * 2, step_y):
for x in range(-img.width, img.width * 2, step_x):
draw_wm.text((x, y), watermark_text, font=font, fill=text_color)
# Rotim layer-ul
rotated = watermark_layer.rotate(-45, expand=1)
# Decupăm la dimensiunea originală
x_center = rotated.width // 2
y_center = rotated.height // 2
half_w = img.width // 4
half_h = img.height // 4
cropped = rotated.crop((x_center - half_w, y_center - half_h,
x_center + half_w, y_center + half_h))
# Asigurăm același mode și dimensiune
cropped = cropped.convert("RGBA").resize(img.size)
# Combinăm cu pagina originală
watermarked = Image.alpha_composite(img, cropped)
images.append(watermarked.convert("RGB"))
# Salvăm PDF final cu metadate
images[0].save(output_pdf, save_all=True, append_images=images[1:])
# Redeschidem pentru a adăuga metadatele
doc = fitz.open(output_pdf)
doc.set_metadata({
"title": "Raport oficial",
"author": "Nume Prenume",
"subject": "Document protejat",
"keywords": "Protecție, watermark, confidențial",
"creator": "Sistem intern de generare PDF",
"producer": "Denumire",
"creationDate": datetime.datetime.now().strftime("D:%Y%m%d%H%M%S"),
"modDate": datetime.datetime.now().strftime("D:%Y%m%d%H%M%S")
})
doc.saveIncr()
doc.close()
print(f"PDF creat cu watermark și metadate: {output_pdf}")
Cum să protejezi documentele PDF împotriva copierii și printării: tehnici de watermark și securizare
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий