我試圖從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