使用 LuaLaTeX 实现 PDF 安全/加密

使用 LuaLaTeX 实现 PDF 安全/加密

我想知道是否可以使用 LuaLaTeX 保护 pdf 文件(例如控制打印/复印/...访问)无需使用第三方软件喜欢定量PDF或列出的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}

是否可能使用类似 LuaLaTeXs 后端原语\pdfextension

如果仅使用 LuaLaTeX 即可实现 MWE,那么如果有人可以向我展示,我将不胜感激。

谢谢,
戴夫

答案1

谢谢@用户202729我能够通过以下方式自动保护/加密 pdf 文件定量PDF文档) 在 LuaLaTeX 中。

在 PDF 的后期处理过程中结束运行阶段,通过 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

笔记:我不能确切地说这是否涵盖了所有的参数格式,至少是所有格式@用户202729已发布这里得到认可。

然后使用所需的参数执行 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}

相关内容