我试图从PDF文件中获取一些信息。我试过使用PdfSharp,它具有我需要的信息的属性,但它不能打开iref流,所以我不得不放弃它。从iTextSharp获取PDF文档属性
而是我正在尝试iTextSharp。到目前为止,我已经设法从Info数组中获得一些基本信息,例如标题,aurhor和主题。
但是,我现在更多的信息之后,但在iTextSharp的无法找到它暴露(如果是暴露的)....我之后的信息下面的图片中强调:
我不知道这些信息的存储位置。任何和所有的帮助将不胜感激。
我试图从PDF文件中获取一些信息。我试过使用PdfSharp,它具有我需要的信息的属性,但它不能打开iref流,所以我不得不放弃它。从iTextSharp获取PDF文档属性
而是我正在尝试iTextSharp。到目前为止,我已经设法从Info数组中获得一些基本信息,例如标题,aurhor和主题。
但是,我现在更多的信息之后,但在iTextSharp的无法找到它暴露(如果是暴露的)....我之后的信息下面的图片中强调:
我不知道这些信息的存储位置。任何和所有的帮助将不胜感激。
感谢MKL的回答,这是故事的一部分,但这里是你帮我找到了答案:
using (var pdf = new PdfReader(File))
{
Console.WriteLine(PdfEncryptor.IsModifyAnnotationsAllowed(pdf.Permissions));
}
的PdfEncryptor是少了什么,它的P值转换成简单的布尔是或不是。在有其他方法是:
至于安全方法的一部分,这就是我去:
using (var pdf = new PdfReader(File))
{
Console.WriteLine(!pdf.IsOpenedWithFullPermissions == Expected);
}
对于文档中使用标准的密码加密您可以在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相同的陷阱。
好吧,这就是方便的方法... ;-)在另一方面,** P **值独行这些测试中的一些还不够,请参阅上面的表格,对于不同的安全处理程序版本,解释会有所不同。 – mkl