Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从iTextSharp中的PDF获取文档属性_C#_Pdf_Itextsharp - Fatal编程技术网

C# 从iTextSharp中的PDF获取文档属性

C# 从iTextSharp中的PDF获取文档属性,c#,pdf,itextsharp,C#,Pdf,Itextsharp,我正试图从PDF文件中获取一些信息。我试过使用PdfSharp,它有我需要的信息的属性,但是它不能打开iref流,所以我不得不放弃它 相反,我试着让它更锋利。到目前为止,我已经设法从信息数组中获得了一些基本信息,比如标题、极光和主题 然而,我现在需要更多的信息,但是在iTextSharp中找不到它暴露的位置(如果暴露的话)。。。。我想要的信息在下图中突出显示: 我不知道这些信息存储在哪里。非常感谢所有帮助。对于使用标准密码加密加密的文档,您可以在PdfReader PdfReader中使用

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

相反,我试着让它更锋利。到目前为止,我已经设法从信息数组中获得了一些基本信息,比如标题、极光和主题

然而,我现在需要更多的信息,但是在iTextSharp中找不到它暴露的位置(如果暴露的话)。。。。我想要的信息在下图中突出显示:


我不知道这些信息存储在哪里。非常感谢所有帮助。

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

  • getPermissions()
    对于iText/Java

      int permissions = pdfReader.getPermissions()
    
  • 权限
    如果是iTextSharp/.Net

      int permissions = pdfReader.Permissions
    
返回的
int
值是包含

一组标志,指定在用户访问下打开文件时应允许的操作(见表22)

[……]

p条目的值应解释为一个未签名的32位数量,其中包含一组标志,指定当使用用户访问权限打开文档时应授予哪些访问权限。表22显示了这些标志的含义。标志字内的位位置应从1(低阶)到32(高阶)进行编号。任何位置的1位应启用相应的访问权限

[……]

位位置含义

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

4通过位6、9和11控制以外的操作修改文档内容

5(修订版2的安全处理程序)从文档中复制或以其他方式提取文本和图形,包括提取文本和图形(以支持残疾用户访问或用于其他目的)。(第3版或更高版本的安全处理程序)通过位10控制以外的操作从文档中复制或以其他方式提取文本和图形

6添加或修改文本注释,填写交互式表单字段,如果还设置了位4,则创建或修改交互式表单字段(包括签名字段)

9(第3版或更高版本的安全处理程序)填写现有的交互式表单字段(包括签名字段),即使第6位已清除

10(第3版或更高版本的安全处理程序)提取文本和图形(支持残疾用户访问或用于其他目的)

11(第3版或更高版本的安全处理程序)组装文档(插入、旋转或删除页面并创建书签或缩略图),即使第4位已清除

12(第3版或更高版本的安全处理程序)将文档打印为一种表示形式,从中可以生成PDF内容的真实数字副本。当该位为清除(并且设置了位3)时,打印仅限于外观的低级表示,可能质量降低

(PDF规范第7.6.3.2节“标准加密字典”)

您可以在此上下文中使用
PdfWriter.ALLOW.*
常量


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

感谢mkl的回答,这是故事的一部分,但以下是您帮助我找到的答案:

using (var pdf = new PdfReader(File))
{
   Console.WriteLine(PdfEncryptor.IsModifyAnnotationsAllowed(pdf.Permissions));
}
PdfEncryptor是缺少的,它将p值转换为简单的布尔值,表示是或否。其他方法有:

  • 不允许装配
  • 伊斯科皮亚尔德
  • 是否允许降级打印
  • 是的
  • IsModifyAnnotationsAllowed
  • 伊斯莫迪夫
  • 允许打印
  • ISScreenReaderSallow
至于安全方法部分,这就是我所说的:

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

好的,这是方便的方法…;-)另一方面,仅P值不足以进行某些测试,见上表,不同安全处理程序版本的解释不同。