我的软件使用内置API(PDFKIT)生成PDF文件。
我现在需要从编程中从中创建一个密码(通过加密)PDF文件。pdfkit似乎不支持这一点。
我希望我可以使用AppleScript告诉预览以打开PDF,然后使用密码保存,但是看来Preview的AppleScript词典没有为此提供选项。
我有什么选择?
如果您已经熟悉Apple的PDFKIT API,那么对PDF进行加密非常容易。
创建一个具有kCGPDFContextOwnerPassword
和kCGPDFContextAllowsCopying
等项目的密钥/值的辅助词典。然后使用PDFDocument
的writeToFile: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)