Si vous êtes déjà familiarisé avec les API PDFKit d'Apple, le chiffrement d'un PDF est très facile.
Créez un dictionnaire auxiliaire avec des clés/valeurs pour des éléments tels que kCGPDFContextOwnerPassword
y kCGPDFContextAllowsCopying
. Ensuite, utilisez PDFDocument
's writeToFile:withOptions
méthode.
https://developer.apple.com/documentation/pdfkit/pdfdocument/1436053-writetofile?language=objc
Voici un script en python qui crypte les PDF, mais il devrait être très facile de le traduire en Swift ou ObjC. Le dictionnaire est nommé ' options
'.
Sur la ligne de commande, fournissez les noms de fichiers PDF comme arguments. Vous pouvez également l'utiliser dans une action Automator "Run Shell script".
#!/usr/bin/python
# coding: utf-8
import os, sys
from Quartz import PDFDocument, kCGPDFContextAllowsCopying, kCGPDFContextAllowsPrinting, kCGPDFContextUserPassword, kCGPDFContextOwnerPassword
from CoreFoundation import (NSURL)
copyPassword = "12345678" # Password for copying and printing
openPassword = copyPassword # Password to open the file.
# Set openPassword as '' to allow opening with no password.
def encrypt(filename):
filename =filename.decode('utf-8')
if not filename:
print 'Unable to open input file'
sys.exit(2)
shortName = os.path.splitext(filename)[0]
outputfile = shortName+" locked.pdf"
pdfURL = NSURL.fileURLWithPath_(filename)
pdfDoc = PDFDocument.alloc().initWithURL_(pdfURL)
if pdfDoc :
options = {
kCGPDFContextAllowsCopying: False,
kCGPDFContextAllowsPrinting: False,
kCGPDFContextOwnerPassword: copyPassword,
kCGPDFContextUserPassword: openPassword}
pdfDoc.writeToFile_withOptions_(outputfile, options)
return
if __name__ == "__main__":
for filename in sys.argv[1:]:
encrypt(filename)