1

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

我尝试过的事情:

GetSecurityHandler()似乎没有一种方法可以处理密码插入:

 SecurityHandler handler = m_PdfDocument.GetSecurityHandler();

接受密码字符串但抛出错误:

m_PdfDocument.InitStdSecurityHandler(pwd);

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

从我认为我需要的消息来看m_PdfDocument.InitSecurityHandler(),但该方法不需要字符串,只有 int。

任何人都可以让我走上正确的轨道吗?

4

2 回答 2

1

感谢您发送文件。此文件使用自定义加密进行加密。您的数字版权管理。没有 PDF 阅读器可以打开文件,只有您自己的自定义 PDF 阅读器。

要使用 PDFNet 打开 PDF,您首先需要了解文件是如何加密的,并且基本上相反。我假设进行加密的另一个团队也在解密,至少出于测试目的?

它可能就像我们的加密示例中的示例 3 一样简单。在这种情况下,您只需使用其他团队使用的过滤器名称进行注册。我想我知道那是什么,但不会在此处发布,而是会通过电子邮件发送给您。

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

CreateDelegate frodo_del = new CreateDelegate(FrodoSecurityHandler.Create);
SecurityManagerSingleton.Instance().RegisterSecurityHandler("Frodo", new SecurityDescriptor("Frodo Security", frodo_del));
于 2017-03-24T17:31:12.240 回答
0

那么根据这个页面,GetSecurityHandler()在你初始化另一个处理程序之后使用,所以因为InitSecurityHandler()需要一个 int 你可以这样做

    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 在以下页面。扎诺尼·
布兰登准将

于 2017-03-23T13:52:52.040 回答