Добавить защиту паролем к существующему файлу PDF с помощью PDFKit iOS - PullRequest
0 голосов
/ 05 октября 2018

Я хотел добавить защиту паролем в существующий файл 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 () перед просмотром файла.Я ожидал, что файл больше не будет просматриваться или он сначала запросит пароль, прежде чем его можно будет просмотреть, но я все равно могу просмотреть его напрямую, как если бы эта строка не существовала.

Я пытался PSPDFKit до и когда я добавляю защиту паролем в файл PDF, при просмотре файла сначала запрашивается пароль, и файл в хранилище приложения блокируется / шифруется, но я не получаю, когда использую этоiOS PDFKit новая функция для iOS 11 и более поздних версий.

1 Ответ

0 голосов
/ 05 октября 2018

Ваша проблема в том, что вы не шифруете 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
    }
}

Я надеюсь, что эта помощь

...