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