Безопасность/шифрование PDF с помощью LuaLaTeX

Безопасность/шифрование PDF с помощью LuaLaTeX

Мне было интересно, можно ли защитить файлы PDF (например, контролировать печать/копирование/... доступ) с помощью LuaLaTeXбез использования стороннего программного обеспечениянравитьсяQPDFили те, которые перечислены вpdfcryptупаковка.

Некоторые старыепочтаговорит, что это возможно с \specialкомандой, но ее пример использует XeTeX и при тестировании с LuaLaTeX это не совсем работает так, как ожидалось. Они действительно говорят, что, вероятно, нет эквивалента для LuaLaTeX:

\special{pdf:encrypt ownerpw (abc) userpw (xyz) length 128 perm 2052}
\documentclass{article}
\begin{document}
This is a test.
\end{document}

Возможно ли это с помощью базовых примитивов LuaLaTeX, таких как \pdfextension?

Буду признателен, если кто-нибудь покажет мне MWE, если это возможно только с LuaLaTeX.

Спасибо,
Дэйв.

решение1

Благодаря@user202729Мне удалось автоматизировать защиту/шифрование файлов PDF с помощьюQPDF(Документация) в LuaLaTeX.

Во время постобработки PDF-файла вwrapup_runНа этапе вывода выходной каталог считывается с помощью сопоставления с образцом Lua:

local outdir = nil
for i = 0, #arg, 1 do
    if string.find(arg[i], "%-+output%-d[irectory]*%=?%s?") then
        outdir = string.gsub(arg[i], "%-+output%-d[irectory]*%=?%s?", "")
    end
end

Примечание: Я не могу точно сказать, охватываются ли все форматы аргументов этим, по крайней мере, все форматы, которые@user202729опубликовалздесьпризнаны.

Затем QPDF выполняется с требуемыми аргументами:

os.execute((outdir ~= nil and "cd " .. outdir .. " &&" or "") .. "qpdf " .. tex.jobname .. ".pdf --encrypt userpw ownerpw 256 --accessibility=y --assemble=y --extract=y --form=y --modify-other=y --print=full -- " .. tex.jobname .. "_secure.pdf")

Полная версия MWE (Windows 10):

\documentclass{book}

\usepackage{luacode}

\begin{luacode}
    luatexbase.add_to_callback("wrapup_run", function()
        local outdir = nil
        for i = 0, #arg, 1 do
            if string.find(arg[i], "%-+output%-d[irectory]*%=?%s?") then
                outdir = string.gsub(arg[i], "%-+output%-d[irectory]*%=?%s?", "")
            end
        end
        os.execute((outdir ~= nil and "cd " .. outdir .. " &&" or "") .. "qpdf " .. tex.jobname .. ".pdf --encrypt userpw ownerpw 256 --accessibility=y --assemble=y --extract=y --form=y --modify-other=y --print=full -- " .. tex.jobname .. "_secure.pdf")
    end, "Callback to secure pdf")
\end{luacode}

\begin{document}
    Hello World!
\end{document}

Связанный контент