2014-01-16 111 views
3

我试图从PDF文件中获取一些信息。我试过使用PdfSharp,它具有我需要的信息的属性,但它不能打开iref流,所以我不得不放弃它。从iTextSharp获取PDF文档属性

而是我正在尝试iTextSharp。到目前为止,我已经设法从Info数组中获得一些基本信息,例如标题,aurhor和主题。

但是,我现在更多的信息之后,但在iTextSharp的无法找到它暴露(如果是暴露的)....我之后的信息下面的图片中强调:

Info I Need

我不知道这些信息的存储位置。任何和所有的帮助将不胜感激。

回答

1

感谢MKL的回答,这是故事的一部分,但这里是你帮我找到了答案:

using (var pdf = new PdfReader(File)) 
{ 
    Console.WriteLine(PdfEncryptor.IsModifyAnnotationsAllowed(pdf.Permissions)); 
} 

的PdfEncryptor是少了什么,它的P值转换成简单的布尔是或不是。在有其他方法是:

  • IsAssemblyAllowed
  • IsCopyAllowed
  • IsDegradedPrintingAllowed
  • IsFillInAllowed
  • IsModifyAnnotationsAllowed
  • IsModifyContentsAllowed
  • IsPrintingAllowed
  • IsScreenReadersAllowed

至于安全方法的一部分,这就是我去:

using (var pdf = new PdfReader(File)) 
{ 
    Console.WriteLine(!pdf.IsOpenedWithFullPermissions == Expected); 
} 
+1

好吧,这就是方便的方法... ;-)在另一方面,** P **值独行这些测试中的一些还不够,请参阅上面的表格,对于不同的安全处理程序版本,解释会有所不同。 – mkl

6

对于文档中使用标准的密码加密您可以在PdfReader pdfReader使用

  • getPermissions()中的情况下,打开文件中的iText/Java的

    int permissions = pdfReader.getPermissions() 
    
  • Permissions情况后取回权限加密iTextSharp/.Net

    int permissions = pdfReader.Permissions 
    

返回的int值是包含

一组标志,指定的其中文档被打开时与用户访问操作应被允许的加密字典的P值(见表22) 。

[...]

文档被打开时与用户应被授予P条目应被解释为包含的一组标志指定哪些访问权限的无符号32位量的值访问。表22显示了这些标志的含义。标志字内的位置应从1(低位)到32(高位)编号。任何位置的1位应启用相应的访问权限。

[...]

位的位置含义

(修订版2的安全处理程序)打印文档。 (修订版3或更高版本的安全处理程序)打印文档(可能不是最高质量级别,具体取决于是否还设置了位12)。

通过除了由位6,9和11控制的操作以外的操作来修改文档的内容。

(修订版2的安全处理程序)复制或以其他方式提取文本和图形从文件,包括提取文本和图形(支持无障碍的用户有残疾或其他目的)。 复制或以其他方式由位10

控制以外的其它操作中提取从文档的文本和图形(修订3或更大的安全处理程序)添加或修改文本注释,填写交互表单域,并且如果位4也被设置,则创建或修改交互式表单字段(包括签名字段)。

(修订3或更大的安全处理程序)填补现有交互表单域(包括签名域),即使位6是明确的。

提取文本和图形(支持无障碍的用户有残疾或其他目的)(修订版3或更高的安全处理程序)。

(修订版3或更高的安全处理程序)组装文件(插入,旋转或删除页面并创建书签或缩略图),即使第4位是明确的。

(修订3或更大的安全处理程序)打印文档到从中可被生成的PDF内容的忠实数字拷贝的表示。当该位清零(并且位3置位)时,打印仅限于外观的低级表示,可能会降低质量。

(第7.6.3.2 “标准加密字典” 中的PDF规范ISO 32000-1

可以使用PdfWriter.ALLOW_*常量在这种情况下。

关于您制作的对话框截图,请注意,有效的操作不仅取决于PDF文档,还取决于PDF查看器!否则,您可能会陷入与this question的OP相同的陷阱。