使用 PDFKit 为现有 pdf 文件添加密码保护 iOS
Add a password protection to an existing pdf file using PDFKit iOS
我想为我的应用程序中的现有 pdf 文件添加密码保护。
这是我的代码:
if let path = Bundle.main.path(forResource: "pdf_file", ofType: "pdf") {
let url = URL(fileURLWithPath: path)
if let pdfDocument = PDFDocument(url: url) {
pdfDocument.write(to: url, withOptions: [PDFDocumentWriteOption.userPasswordOption : "pwd"])
pdfView.displayMode = .singlePageContinuous
pdfView.autoScales = true
// pdfView.displayDirection = .horizontal
pdfView.document = pdfDocument
}
}
在查看文件之前添加了行 pdfDocument.write()。我原以为该文件不会再被查看,或者它会先询问密码才能查看,但我仍然可以直接查看它,就好像该行不存在一样。
我在为 pdf 文件添加密码保护之前和之后尝试了 PSPDFKit,在查看文件时它首先要求输入密码并且应用程序存储中的文件是 locked/encrypted,但这不是我在 iOS PDFKit iOS 11 及更高版本的新功能时得到的结果。
你的问题是你没有加密 pdfDocument,你将 pdfDocument 的加密副本写入磁盘,如果你从磁盘读取此文档,它将受到保护。
示例:
if let path = Bundle.main.path(forResource: "pdf_file", ofType: "pdf") {
let url = URL(fileURLWithPath: path)
if let pdfDocument = PDFDocument(url: url) {
let documentDirectory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
let encryptedFileURL = documentDirectory.appendingPathComponent("encrypted_pdf_file")
// write with password protection
pdfDocument.write(to: encryptedFileURL, withOptions: [PDFDocumentWriteOption.userPasswordOption : "pwd",
PDFDocumentWriteOption.ownerPasswordOption : "pwd"])
// get encrypted pdf
guard let encryptedPDFDoc = PDFDocument(url: encryptedFileURL) else {
return
}
print(encryptedPDFDoc.isEncrypted) // true
print(encryptedPDFDoc.isLocked) // true
pdfView?.displayMode = .singlePageContinuous
pdfView?.autoScales = true
pdfView?.displayDirection = .horizontal
pdfView?.document = encryptedPDFDoc
}
}
希望对您有所帮助
我想为我的应用程序中的现有 pdf 文件添加密码保护。
这是我的代码:
if let path = Bundle.main.path(forResource: "pdf_file", ofType: "pdf") {
let url = URL(fileURLWithPath: path)
if let pdfDocument = PDFDocument(url: url) {
pdfDocument.write(to: url, withOptions: [PDFDocumentWriteOption.userPasswordOption : "pwd"])
pdfView.displayMode = .singlePageContinuous
pdfView.autoScales = true
// pdfView.displayDirection = .horizontal
pdfView.document = pdfDocument
}
}
在查看文件之前添加了行 pdfDocument.write()。我原以为该文件不会再被查看,或者它会先询问密码才能查看,但我仍然可以直接查看它,就好像该行不存在一样。
我在为 pdf 文件添加密码保护之前和之后尝试了 PSPDFKit,在查看文件时它首先要求输入密码并且应用程序存储中的文件是 locked/encrypted,但这不是我在 iOS PDFKit iOS 11 及更高版本的新功能时得到的结果。
你的问题是你没有加密 pdfDocument,你将 pdfDocument 的加密副本写入磁盘,如果你从磁盘读取此文档,它将受到保护。 示例:
if let path = Bundle.main.path(forResource: "pdf_file", ofType: "pdf") {
let url = URL(fileURLWithPath: path)
if let pdfDocument = PDFDocument(url: url) {
let documentDirectory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
let encryptedFileURL = documentDirectory.appendingPathComponent("encrypted_pdf_file")
// write with password protection
pdfDocument.write(to: encryptedFileURL, withOptions: [PDFDocumentWriteOption.userPasswordOption : "pwd",
PDFDocumentWriteOption.ownerPasswordOption : "pwd"])
// get encrypted pdf
guard let encryptedPDFDoc = PDFDocument(url: encryptedFileURL) else {
return
}
print(encryptedPDFDoc.isEncrypted) // true
print(encryptedPDFDoc.isLocked) // true
pdfView?.displayMode = .singlePageContinuous
pdfView?.autoScales = true
pdfView?.displayDirection = .horizontal
pdfView?.document = encryptedPDFDoc
}
}
希望对您有所帮助