Используйте PDF Toolkit, pdftk
. Это с открытым исходным кодом и работает на Windows, а также Linux. Вы можете добавить пароли, шифрование и изменить разрешения, как показано в примерах здесь
Зашифруйте PDF, используя 128-битную силу (по умолчанию) и отозвав все разрешения (по умолчанию)
pdftk mydoc.pdf output mydoc.128.pdf owner_pw foopass
То же, что и выше, за исключением того, что для открытия PDF требуется пароль
pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz
То же, что и выше, кроме печати разрешено (после открытия PDF)
pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz allow printing
Затем, чтобы автоматизировать это для большого количества файлов, вам нужно будет создать пакетный файл (или powershell) для итерации. Поскольку pdftk - это командная строка, это не должно быть сложно. Я написал и протестировал следующий пакетный файл. Оно работает:
@ECHO OFF
setlocal EnableDelayedExpansion
md out
for /f %%G in ('dir /b "*.pdf"') do (
call:_pwgen passwd
pdftk %%G output out/%%G user_pw !passwd!
echo '%%G', '!passwd!' >> out/passwords.csv
)
goto :EOF
:_pwgen passwd
setlocal ENABLEEXTENSIONS
set _RNDLength=8
set _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
set _Str=%_Alphanumeric%987654321
set passwd=%~1
:_LenLoop
if not "%_Str:~18%"=="" set _Str=%_Str:~9%& set /A _Len+=9& GOTO :_LenLoop
set _tmp=%_Str:~9,1%
set /A _Len=_Len+_tmp
set _count=0
set _RndAlphaNum=
:_loop
set /a _count+=1
set _RND=%Random%
set /A _RND=_RND%%%_Len%
set _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
if !_count! lss %_RNDLength% goto _loop
set passwd=!_RndAlphaNum!
endlocal&set %~1=%passwd%
GOTO:EOF
Благодаря другим обсуждениям здесь о том, как генерировать случайные пароли в командном файле.