Seguridad/cifrado de PDF con LuaLaTeX

Seguridad/cifrado de PDF con LuaLaTeX

Me preguntaba si es posible proteger archivos pdf (por ejemplo, controlar la impresión/copia/... acceso) con LuaLaTeXsin utilizar software de terceroscomoQPDFo los que figuran en elpdfcriptopaquete.

algunos mayorescorreodice que es posible con el \specialcomando, pero su ejemplo usa XeTeX y mientras se prueba con LuaLaTeX no funciona como se esperaba. De hecho, dicen que probablemente no exista un equivalente para LuaLaTeX:

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

¿Es tal vez posible con primitivas de backend de LuaLaTeX como \pdfextension?

Estaría agradecido si alguien pudiera mostrarme un MWE si es posible solo con LuaLaTeX.

Gracias,
dave

Respuesta1

Gracias a@usuario202729Pude automatizar la protección/cifrado de archivos pdf a través deQPDF(Documentación) dentro de LuaLaTeX.

Durante el posprocesamiento del PDF en elenvoltura_ejecuciónfase, el directorio de salida se lee a través de la coincidencia de patrones 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

Nota: No puedo decir exactamente si todos los formatos de argumentos están cubiertos por esto, al menos todos los formatos que@usuario202729ha publicadoaquíson reconocidos.

Luego se ejecuta QPDF con los argumentos deseados:

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}

información relacionada