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
Cum să convertești rapid zeci de documente Word în PDF folosind PowerShell / Как быстро конвертировать десятки документов Word в PDF с помощью PowerShell
$sourceFolder = "E:\DocumenteWord"
$destFolder = "E:\DocumentePDF"
if (!(Test-Path $destFolder)) {
New-Item -ItemType Directory -Path $destFolder | Out-Null
}
$wdFormatPDF = 17
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$extensions = @("*.doc", "*.docx")
foreach ($ext in $extensions) {
foreach ($file in Get-ChildItem -Path $sourceFolder -Filter $ext) {
try {
$pdfPath = Join-Path $destFolder ($file.BaseName + ".pdf")
Write-Host "Convertim: $($file.FullName) -> $pdfPath"
$doc = $word.Documents.Open($file.FullName, $false, $true)
# Conversie cu string .NET pur
$doc.SaveAs([string]$pdfPath, [ref]$wdFormatPDF)
$doc.Close($false)
}
catch {
Write-Host "Eroare la fișierul: $($file.FullName) - $($_.Exception.Message)" -ForegroundColor Red
}
}
}
$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
Write-Host "Conversia a fost finalizată!"
Полезные команды PowerShell
Эти команды PowerShell помогут вам управлять файлами, директориями, службами и получать основную информацию о системе. Примеры подходят как для начинающих, так и для опытных пользователей.
$sourceFolder = "E:\DocumenteWord"
$destFolder = "E:\DocumentePDF"
if (!(Test-Path $destFolder)) {
New-Item -ItemType Directory -Path $destFolder | Out-Null
}
$wdFormatPDF = 17
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$extensions = @("*.doc", "*.docx")
foreach ($ext in $extensions) {
foreach ($file in Get-ChildItem -Path $sourceFolder -Filter $ext) {
try {
$pdfPath = Join-Path $destFolder ($file.BaseName + ".pdf")
Write-Host "Convertim: $($file.FullName) -> $pdfPath"
$doc = $word.Documents.Open($file.FullName, $false, $true)
# Conversie cu string .NET pur
$doc.SaveAs([string]$pdfPath, [ref]$wdFormatPDF)
$doc.Close($false)
}
catch {
Write-Host "Eroare la fișierul: $($file.FullName) - $($_.Exception.Message)" -ForegroundColor Red
}
}
}
$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
Write-Host "Conversia a fost finalizată!"
🔐 Блокировка установки и удаления программ в Windows 10
Ниже представлен PowerShell-скрипт, который позволяет ограничить установку и удаление программ на компьютере под управлением Windows 10. Скрипт следует запускать от имени администратора. Он вносит изменения в реестр, блокируя доступ к установщику MSI, Microsoft Store, панели управления и другим функциям.
# Сценарий для блокировки установки и удаления приложений в Windows 10 # Требуется запуск от имени администратора # 1. Блокировка Windows Installer (MSI) $RegistryPathInstaller = "HKLM:\Software\Policies\Microsoft\Windows\Installer" New-Item -Path $RegistryPathInstaller -Force | Out-Null Set-ItemProperty -Path $RegistryPathInstaller -Name "DisableMSI" -Value 1 # 1 - Отключить Windows Installer для стандартных пользователей # 2. Блокировка доступа к "Добавить или удалить программы" в Панели управления $RegistryPathUninstall = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Uninstall" New-Item -Path $RegistryPathUninstall -Force | Out-Null Set-ItemProperty -Path $RegistryPathUninstall -Name "NoAddRemovePrograms" -Value 1 # 1 - Скрыть "Добавить или удалить программы" # 3. Блокировка доступа к Microsoft Store $RegistryPathStore = "HKLM:\Software\Policies\Microsoft\WindowsStore" New-Item -Path $RegistryPathStore -Force | Out-Null Set-ItemProperty -Path $RegistryPathStore -Name "RemoveWindowsStore" -Value 1 # 1 - Отключить Microsoft Store # 4. Блокировка UAC (Контроль учетных записей пользователей), чтобы ограничить установку $RegistryPathUAC = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" Set-ItemProperty -Path $RegistryPathUAC -Name "EnableLUA" -Value 1 # 1 - Включить UAC # 5. Блокировка изменения приложений через приложение "Настройки" $RegistryPathSettings = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" New-Item -Path $RegistryPathSettings -Force | Out-Null Set-ItemProperty -Path $RegistryPathSettings -Name "NoControlPanel" -Value 1 # 1 - Скрыть Панель управления и Настройки Write-Output "Ограничения успешно применены. Обычные пользователи не могут устанавливать или удалять приложения.
🔐 Как изменить порт удалённого рабочего стола (RDP) с помощью PowerShell
Изменение стандартного порта RDP (3389) на произвольный — это распространённая мера безопасности среди системных администраторов. Ниже приведён PowerShell-скрипт, который автоматизирует процесс изменения порта, перезапуска службы RDP и настройки брандмауэра Windows.
# Укажите новый порт
$nouPort = 61322 # Замените на желаемый порт
# Изменение порта RDP в реестре Windows
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\' -Name 'PortNumber' -Value $nouPort
# Проверка изменения
$portSchimbat = Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\' -Name 'PortNumber'
if ($portSchimbat.PortNumber -eq $nouPort) {
Write-Output "Порт RDP успешно изменён на $nouPort."
} else {
Write-Output "Ошибка при изменении порта RDP."
}
# Перезапуск службы удалённого рабочего стола
Restart-Service -Name TermService -Force
Write-Output "Служба RDP перезапущена. Проверьте доступность нового порта."
# Открытие нового порта в брандмауэре Windows
New-NetFirewallRule -DisplayName "Allow RDP on Port $nouPort" -Direction Inbound -Protocol TCP -LocalPort $nouPort -Action Allow
Как настроить автоматический вход в Windows с помощью PowerShell: пошаговое руководство
В этом руководстве вы узнаете, как настроить автоматический вход в систему Windows с помощью PowerShell. Это может быть полезно для серверов, тестовых машин или других устройств, где требуется автоматический доступ без ввода пароля.
Шаг 1: Укажите имя пользователя и пароль
На этом этапе задаётся имя пользователя и пароль, которые будут использоваться для автоматического входа. Если пароль не требуется — оставьте его пустым.
$UserName = "Admin"
$Password = "пароль_пользователя" # Можно оставить пустым, если пароль не используется
Шаг 2: Укажите путь в реестре
Этот путь используется для хранения параметров автоматического входа.
$regKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Шаг 3: Настройка параметров входа
Теперь задаются параметры: включение автологина, имя пользователя и пароль.
Set-ItemProperty -Path $regKey -Name "AutoAdminLogon" -Value "1"
Set-ItemProperty -Path $regKey -Name "DefaultUserName" -Value $UserName
Set-ItemProperty -Path $regKey -Name "DefaultPassword" -Value $Password
Шаг 4: Подтверждение
После выполнения настроек будет выведено сообщение об успешной настройке.
Write-Host "Автоматический вход для пользователя $UserName был успешно настроен."
Когда стоит использовать автологин?
- На серверах или терминалах без физического доступа.
- На тестовых или демонстрационных машинах.
- В закрытых системах, где безопасность не является приоритетом.
Важно: автоматический вход снижает уровень безопасности. Любой, кто имеет физический доступ к ПК, сможет войти в систему без пароля.
$UserName = "Admin"
$Password = "пароль_пользователя" # Можно оставить пустым, если пароль не используется
$regKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $regKey -Name "AutoAdminLogon" -Value "1"
Set-ItemProperty -Path $regKey -Name "DefaultUserName" -Value $UserName
Set-ItemProperty -Path $regKey -Name "DefaultPassword" -Value $Password
Write-Host "Автоматический вход для пользователя $UserName был успешно настроен."
Cum aflăm și modificăm portul RDP pe Windows – pas cu pas și avantaje
1. De ce să schimbăm portul RDP?
- Securitate sporită: Portul standard 3389 este cunoscut și scanat frecvent de atacatori. Ascunderea RDP în spatele unui port alternativ ajută la evitarea unor atacuri automate (de tip „bot”), crescând șansele de a trece neobservat la scanările generice.
- Reducerea conflictelor: În anumite organizații sau rețele, portul 3389 poate fi deja rezervat ori blocat. Schimbarea portului rezolvă posibile conflicte și face configurația mai flexibilă.
- Obicei bun de administrare: În general, mutarea serviciilor importante de pe porturile implicite este o practică uzuală pentru a avea un plus de protecție și pentru a organiza mai eficient politicile de firewall
Как скачать видео с facecast.net | How download video from facecast.net
În timpul conferinței noastre, apăsăm butonul F12 și observăm că videoclipul este încărcat în segmente de o secundă. Atunci când facem clic pe unul dintre fișierele .ts, suntem întrebați unde dorim să salvăm. Această funcționalitate ne-a inspirat ideea de a descărca fiecare fișier .ts și de a le uni ulterior într-un singur videoclip complet.