Как правильно добавить пароль к программно созданному PDF в Swift? - PullRequest
0 голосов
/ 05 ноября 2018

В настоящее время я создаю свой PDF следующим образом:

func drawPDFUsingPrintPageRenderer(printPageRenderer: UIPrintPageRenderer) -> NSData! {
    let data = NSMutableData()

    UIGraphicsBeginPDFContextToData(data, CGRect(x: 0, y: 0, width: A4PageHeight, height: A4PageWidth), nil)
    UIGraphicsBeginPDFPage()

    printPageRenderer.drawPage(at: 0, in: UIGraphicsGetPDFContextBounds())

    UIGraphicsEndPDFContext()

    return data
}

с помощью Page Renderer:

let printPageRenderer = CustomPrintPageRenderer()
let printFormatter = UIMarkupTextPrintFormatter(markupText: self.getHTML())
printPageRenderer.addPrintFormatter(printFormatter, startingAtPageAt: 0)

и попробуйте создать PDF из данных как:

let pdfData = printPageRenderer.drawPDFUsingPrintPageRenderer(printPageRenderer: printPageRenderer)
mailComposer.addAttachmentData(pdfData as Data, mimeType: "application/pdf", fileName: "My PDF")

Когда я создаю новый экземпляр для моего средства визуализации страниц:

class CustomPrintPageRenderer: UIPrintPageRenderer {
let A4PageWidth: CGFloat = 595.2
let A4PageHeight: CGFloat = 841.8

var html: String?

override init() {
    super.init()

    // Specify the frame of the A4 page.
    let pageFrame = CGRect(x: 0.0, y: 0.0, width: A4PageHeight, height: A4PageWidth)

    // Set the page frame.
    self.setValue(NSValue(cgRect: pageFrame), forKey: "paperRect")

    // Set the horizontal and vertical insets (that's optional).
    self.setValue(NSValue(cgRect: pageFrame), forKey: "printableRect")
    self.setValue(1234, forKey: kCGPDFContextUserPassword as String)
    self.setValue(1234, forKey: kCGPDFContextOwnerPassword as String)
}

Я пытаюсь установить пароль к нему через:

self.setValue(1234, forKey: kCGPDFContextUserPassword as String)
self.setValue(1234, forKey: kCGPDFContextOwnerPassword as String)

но когда я запускаю свой код, он вылетает с ошибкой:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason:  
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key kCGPDFContextUserPassword.'

Что я делаю не так и как я могу это исправить? Я гуглил, но не смог найти ничего полезного

1 Ответ

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

Согласно документации для UIGraphicsBeginPDFContextToData, последний параметр - это словарь, который использует те же вспомогательные ключи, что и CGPDFContext.

kCGPDFContextUserPassword и kCGPDFContextOwnerPassword среди этих вспомогательных клавиш.

Так что может показаться, что вам нужно установить пароль в вашем вызове на UIGraphicsBeginPDFContextToData.

let info: [AnyHashable: Any] = [kCGPDFContextUserPassword as String : "1234", kCGPDFContextOwnerPassword as String : "1234"]
UIGraphicsBeginPDFContextToData(data, CGRect(x: 0, y: 0, width: A4PageHeight, height: A4PageWidth), info)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...