Segurança/Criptografia de PDF com LuaLaTeX

Segurança/Criptografia de PDF com LuaLaTeX

Eu queria saber se é possível proteger arquivos PDF (por exemplo, controlar impressão/cópia/... acesso) com LuaLaTeXsem usar software de terceiroscomoQPDFou aqueles listados nopdfcryptpacote.

Alguns mais velhospublicardiz que é possível com o \specialcomando, mas seu exemplo usa XeTeX e durante o teste com LuaLaTeX não está funcionando como esperado. Na verdade, eles dizem que provavelmente não há equivalente para LuaLaTeX:

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

Talvez seja possível com primitivos de back-end do LuaLaTeX como \pdfextension?

Ficaria grato se alguém pudesse me mostrar um MWE, se for possível apenas com LuaLaTeX.

Obrigado,
Dave

Responder1

Graças a@usuário202729Consegui automatizar a segurança/criptografia de arquivos PDF viaQPDF(Documentação) dentro do LuaLaTeX.

Durante o pós-processamento do PDF nowrapup_runfase, o diretório de saída é lido através da correspondência de padrões de 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

Observação: Não posso dizer exatamente se todos os formatos de argumentos são abrangidos por isto, pelo menos todos os formatos que@usuário202729postouaquisão reconhecidos.

QPDF é então executado com os argumentos desejados:

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 completo (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}

informação relacionada