Какао Swift MacOS Распечатать HTML в PDF - PullRequest
0 голосов
/ 28 мая 2018

Я хочу создать PDF-файл из HTML-контента.(Для создания счетов из HTML-шаблона) Я хотел бы отметить, что я siwft-beginner .

Чтобы напечатать html-содержимое в файл PDF, я использую следующий код:

func makePDF(markup: String) {
    let directoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

    let printOpts: [NSPrintInfo.AttributeKey: Any] = [NSPrintInfo.AttributeKey.jobDisposition: NSPrintInfo.JobDisposition.save, NSPrintInfo.AttributeKey.jobSavingURL: directoryURL]
    let printInfo = NSPrintInfo(dictionary: printOpts)
    //printInfo.horizontalPagination = NSPrintInfo.
    //printInfo.verticalPagination = NSPrintInfo.AutoPagination
    printInfo.topMargin = 20.0
    printInfo.leftMargin = 20.0
    printInfo.rightMargin = 20.0
    printInfo.bottomMargin = 20.0

    let view = NSView(frame: NSRect(x: 0, y: 0, width: 570, height: 740))

    if let htmlData = markup.data(using: String.Encoding.utf8) {
        if let attrStr = NSAttributedString(html: htmlData, options: [ .documentType : NSAttributedString.DocumentType.html], documentAttributes: nil) {

            print(attrStr);

            let frameRect = NSRect(x: 0, y: 0, width: 570, height: 740)
            let textField = NSTextField(frame: frameRect)
            textField.attributedStringValue = attrStr
            view.addSubview(textField)

            let printOperation = NSPrintOperation(view: view, printInfo: printInfo)


            printOperation.showsPrintPanel = false
            printOperation.showsProgressPanel = false
            printOperation.run()
        }
    }

Что основано на этом StackOverFlow Вопрос / Ответ: StackOverFlowAnswer

Мне пришлось "перевести" код в swift4 - любые ошибки здесь очень возможны, когдаПри выполнении кода я получаю следующие журналы (в указанном порядке):

  1. NSURLConnection завершил с ошибкой - код -1002
  2. Печать не удалась, потому что PMSessionBeginCGDocumentNoDialog () вернул -61.
  3. NSURLConnection завершено с ошибкой - код -1002

PMSessionBeginCGDocumentNoDialog () -61 -> означает, что у меня нет разрешения на запись в определенном месте в соответствии с this (Ошибка разрешения записи)

Я попытался переключить режим песочницы и дал приложению право на чтение и запись в / из файлов рабочего стола.

Кто-нибудь знает, как исправить ошибку PMSessionBeginCGDocumentNoDialog () -61?(или вообще получить код и запустить ...) Спасибо!

1 Ответ

0 голосов
/ 28 мая 2018

В результате еще одного исследования был получен следующий ответ: SO-ответ

, относящийся к этому проекту GitHub GitHub Swift 3 PDFCreator

Кодв проекте github решены мои ошибки!Работал отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...