指定のPDFをチェックし、オープンするのにパスワードが設定されているとか、コピーが禁止されていないかといったパーミッションを調査するAppleScriptです。
API | Lebel in this script | Desc |
(no api) | openPermission | document allows opening |
allowsCopying | copyPermission | document allows copying of content to the Pasteboard |
allowsPrinting | printPermission | document allows printing |
allowsCommenting | commentPermission | document allows to create or modify document annotations, including form field entries |
allowsContentAccessibility | contentAccessPermission | document allows to extract content from the document |
allowsDocumentAssembly | assemblyPermission | document allows manage a document by inserting, deleting, and rotating pages |
allowsDocumentChanges | docchangePermission | document allows modify the document contents except for document attributes |
allowsFormFieldEntry | formPermission | document allows modify form field entries even if you can’t edit document annotations |
PDFのオープン自体にパスワードロックがかかっている状態を検出するAPIがとくになかったので、いろいろ試行錯誤してOpenをロックしてある状態を検出してみました。
検出は、パスワード未指定でUnlockを試みるというもので、実際にパスワードを設定したPDFを相手に試行錯誤して求めてみました。
このUnlock操作に対してfalseが返ってくることでPDFオープンに対してパスワードが設定されているものと判断しています。
AppleScript名:PDFにパスワードが設定されている場合には、そのパーミッション情報を取得する |
— Created 2015-11-02 13:48:32 +0900 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "QuartzCore" set aPath to (choose file of type {"com.adobe.pdf"} with prompt "Select PDF to check") set aRes to my retProtectedPDFPermissions(aPath) –> missing value (パスワードは設定されていない) –> {openPermission:false, copyPermission:true, printPermission:true, commentPermission:true, contentAccessPermission:true, assemblyPermission:true, docchangePermission:true, formPermission:true}–オープンするためにはパスワードが必要(openPermission) –指定のPDFにパスワードが設定されているかどうかをチェック on retProtectedPDFPermissions(aPath) set aURL to current application’s |NSURL|’s fileURLWithPath:(POSIX path of aPath) set aPDFdoc to current application’s PDFDocument’s alloc()’s initWithURL:aURL set anEncF to aPDFdoc’s isEncrypted() if anEncF = false then return missing value set passLocked to aPDFdoc’s unlockWithPassword:"" set cpPerm to aPDFdoc’s allowsCopying() as boolean set prPerm to aPDFdoc’s allowsPrinting() as boolean set cmPerm to aPDFdoc’s allowsCommenting() as boolean set caPerm to aPDFdoc’s allowsContentAccessibility() as boolean set daPerm to aPDFdoc’s allowsDocumentAssembly() as boolean set dcPerm to aPDFdoc’s allowsDocumentChanges() as boolean set ffPerm to aPDFdoc’s allowsFormFieldEntry() as boolean return {openPermission:passLocked, copyPermission:cpPerm, printPermission:prPerm, commentPermission:cmPerm, contentAccessPermission:caPerm, assemblyPermission:daPerm, docchangePermission:dcPerm, formPermission:ffPerm} end retProtectedPDFPermissions |