【问题标题】:Allow page extraction in a password security pdf with itextsharp允许使用 itextsharp 在密码安全 pdf 中提取页面
【发布时间】:2014-09-11 09:14:54
【问题描述】:

我不知道是否可以创建一个启用密码安全的 pdf,它还允许提取页面。

我没有在 itextsharp 中找到任何允许启用页面提取的属性。

有人知道吗?

这是我想要启用的属性。

非常感谢。

【问题讨论】:

  • 这是哪个版本的 Acrobat? ISO-32000-2 草案规定:第 5 位定义了从文档中复制或以其他方式提取文本和图形的权限。但是,出于向辅助技术提供此内容的有限目的,PDF 阅读器的行为应该就像将此位设置为 1。 我很困惑地看到启用了辅助功能,同时页面提取没有允许。这在 ISO-32000-1 中是可能的,但在 ISO-32000-2 中将被弃用(因此您不应依赖该标志)。
  • 您好,我使用的是 Adob​​e Acrobat Reader 9.4.0,我的文档基于规范 (PDF 1.4)。
  • 我已经调查了您的问题。你似乎在问一些不可能的事情。此外:您的要求并非完全证明。任何想要提取页面的人都可以删除所有者密码。
  • 非常感谢,我也认为在使用密码安全性时不允许提取页面。但是对pdf文档的限制不太了解
  • 嗯,这是一个有趣的问题。我学到了一些我自己不知道的东西;-)

标签: c# pdf-generation itextsharp


【解决方案1】:

我查看了 ISO-32000-2 草案中的权限位,并将它们与 iText 中可用的参数(以 ALL_CAPS 编写)进行了比较:

bit 1:  Not assigned
bit 2:  Not assigned
bit 3:  Degraded printing: ALLOW_DEGRADED_PRINTING
bit 4:  Modify contents: ALLOW_MODIFY_CONTENTS
bit 5:  Extract text / graphics: ALLOW_COPY
bit 6:  Add / Modify text annotations: ALLOW_MODIFY_ANNOTATIONS
bit 7:  Not assigned
bit 8:  Not assigned
bit 9:  Fill in fields: ALLOW_FILL_IN
bit 10: **Deprecated** ALLOW_SCREEN_READERS
bit 11: Assembly: ALLOW_ASSEMBLY
bit 12: Printing: ALLOW_PRINTING

当我将规范与您的屏幕截图进行比较时,我假设权限如下:

  • 打印:ALLOW_DEGRADED_PRINTING 或 ALLOW_PRINTING
  • 更改文档:ALLOW_MODIFY_CONTENTS
  • 评论:ALLOW_MODIFY_ANNOTATIONS
  • 表单字段填写或签名:ALLOW_FILL_IN
  • 文档组装:ALLOW_ASSEMBLY
  • 内容复制:ALLOW_COPY
  • 已启用内容辅助功能:ALLOW_SCREENREADERS

我找不到任何涉及页面提取的权限位。我已尝试设置 ISO-32000-2 中记录的所有标志,但它们并没有导致将页面提取设置为允许。

我尝试了两件事:

首先我尝试设置未分配的位:位 1、2、7、8、13、14。这并没有改变任何东西。然后我在 Acrobat 中打开了一个测试文档,并尝试找到一个允许页面提取的设置:

我找不到。

由于 ISO-32000 中没有描述该权限,并且似乎没有办法在 Acrobat 中设置此权限,我倾向于认为没有办法设置此权限。查看“允许”的唯一方法是使用所有者密码打开文档。

一旦您找到使用 Acrobat 设置此权限的方法,请立即更新您的问题。我正在使用 Acrobat XI Pro。

另外说明:以您的方式设置权限(仅使用所有者密码而不使用用户密码)只是一种心理不是 一种强制保护的全面技术方法。请参阅How to read PDFs created with an unknown random owner password?,了解如何从仅使用所有者密码保护的 PDF 中删除权限。

【讨论】:

    【解决方案2】:

    为了使用 iTextSharp 保护 PDF 文件,同时允许用户提取文本和图像,但阻止他们编辑、保存和打印 PDF 文件,我这样做了 -

    //Obviously, use the correct namespace
    using iTextSharp.text.pdf;
    
    
    //Create an instance of PdfReader, associate your PDF file
    PdfReader reader = new PdfReader(“yourFile.PDF”);
    
    //Secure your file with a password(yourPDFpassword), set the security to
    // PdfWriter.ALLOW_COPY – to allow for security with content extraction
    
    PdfEncryptor.Encrypt(reader, output, true, "", yourPDFpassword, PdfWriter.ALLOW_COPY);
    

    【讨论】:

    • 抱歉,我误解了您的要求。
    猜你喜欢
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多