将密码传递给 pdf 安全处理程序

Passing a password into the pdf security handler

我目前正在做一个项目,在成功 api 调用 returns 密码后可以解密 pdf。 我浏览了 SO 和 pdftron SDK,但找不到关于如何将此密码插入安全处理程序的最终解决方案。

我尝试过的事情:

None GetSecurityHandler() 方法似乎处理密码插入:

 SecurityHandler handler = m_PdfDocument.GetSecurityHandler();

获取密码字符串但抛出错误:

m_PdfDocument.InitStdSecurityHandler(pwd);

错误:消息:不是标准的安全处理程序。需要注册自定义过滤器。

从消息来看,我假设我需要 m_PdfDocument.InitSecurityHandler(),但该方法不接受字符串,只接受 int。

谁能帮我找到正确的轨道?

好吧,根据 this 页面,GetSecurityHandler() 在您初始化另一个处理程序后使用,因此由于 InitSecurityHandler() 需要一个整数,您可以这样做

    string password = "9quali52ty3";

    // Convert the string into a byte[].
    byte[] asciiBytes = Encoding.ASCII.GetBytes(password);
    string compiledBytes = System.Text.Encoding.ASCII.GetString(asciiBytes);
    int convertedBytes = int.Parse(compiledBytes);
    m_PdfDocument.InitSecurityHandler(convertedBytes);
    m_PdfDocument.GetSecurityHandler();

一个好的编程经验法则:总有一种方法可以从一种数据类型转换为另一种数据类型。 致谢:@Brig Lamoreaux、@Zanoni 和@Brandon 在以下页面上。
Brig Zanoni Brandon

感谢您发送文件。此文件使用自定义加密进行加密。你的数字版权管理。没有PDFreader可以打开文件,但是你自己的自定义PDFreader.

要用 PDFNet 打开 PDF,您首先需要找出文件是如何加密的,实际上做相反的事情。我假设进行加密的另一个团队也在解密,至少是出于测试目的?

它可能就像我们 Encryption sample 中的示例 3 一样简单。在这种情况下,您只需要在其他团队使用的过滤器名称下注册。我想我知道那是什么,但不会 post 在这里,而是会给你发电子邮件。

但对于其他人来说,如果 PDF 使用名为 "Frodo" 的过滤器加密,那么它将是

CreateDelegate frodo_del = new CreateDelegate(FrodoSecurityHandler.Create);
SecurityManagerSingleton.Instance().RegisterSecurityHandler("Frodo", new SecurityDescriptor("Frodo Security", frodo_del));