如何以编程方式在MACOS上加密PDF文件



我的软件使用内置API(PDFKIT)生成PDF文件。

我现在需要从编程中从中创建一个密码(通过加密)PDF文件。pdfkit似乎不支持这一点。

我希望我可以使用AppleScript告诉预览以打开PDF,然后使用密码保存,但是看来Preview的AppleScript词典没有为此提供选项。

我有什么选择?

如果您已经熟悉Apple的PDFKIT API,那么对PDF进行加密非常容易。

创建一个具有kCGPDFContextOwnerPasswordkCGPDFContextAllowsCopying等项目的密钥/值的辅助词典。然后使用PDFDocumentwriteToFile:withOptions方法。

https://developer.apple.com/documentation/pdfkit/pdfdocument/1436053-writeTofile?language = objc

这是一个Python脚本,它将加密PDF,但是将其转换为Swift或objc应该很容易。字典命名为" options"。

在命令行上,将PDF的文件名作为参数提供。您也可以在"运行shell脚本"操作中使用此操作。

#!/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)

最新更新