PDF-Sicherheit/Verschlüsselung mit LuaLaTeX

PDF-Sicherheit/Verschlüsselung mit LuaLaTeX

Ich habe mich gefragt, ob es möglich ist, PDF-Dateien mit LuaLaTeX zu schützen (z. B. den Druck-/Kopierungs-/... Zugriff zu kontrollieren).ohne Verwendung von DrittanbietersoftwarewieQPDFoder die in derPDF-VerschlüsselungPaket.

Einige älterePostsagt, dass es mit dem Befehl möglich ist \special, aber das Beispiel verwendet XeTeX und beim Testen mit LuaLaTeX funktioniert es nicht wirklich wie erwartet. Sie sagen tatsächlich, dass es wahrscheinlich kein Äquivalent für LuaLaTeX gibt:

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

Ist dies vielleicht mit LuaLaTeX-Backend-Grundelementen wie möglich \pdfextension?

Ich wäre dankbar, wenn mir jemand ein MWE zeigen könnte, falls es nur mit LuaLaTeX möglich ist.

Danke,
Dave

Antwort1

Dank an@Benutzer202729Ich konnte die Sicherung/Verschlüsselung von PDF-Dateien automatisieren überQPDF(Dokumentation) innerhalb von LuaLaTeX.

Bei der Nachbearbeitung des PDFs imZusammenfassungPhase wird das Ausgabeverzeichnis über Luas Mustervergleich gelesen:

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

Notiz: Ich kann nicht genau sagen, ob alle Argumentformate davon abgedeckt sind, zumindest alle Formate, die@Benutzer202729hat gepostetHierwerden anerkannt.

QPDF wird dann mit den gewünschten Argumenten ausgeführt:

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")

Vollständiges 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}

verwandte Informationen