Я хочу создать 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 - любые ошибки здесь очень возможны, когдаПри выполнении кода я получаю следующие журналы (в указанном порядке):
- NSURLConnection завершил с ошибкой - код -1002
- Печать не удалась, потому что PMSessionBeginCGDocumentNoDialog () вернул -61.
- NSURLConnection завершено с ошибкой - код -1002
PMSessionBeginCGDocumentNoDialog () -61 -> означает, что у меня нет разрешения на запись в определенном месте в соответствии с this (Ошибка разрешения записи)
Я попытался переключить режим песочницы и дал приложению право на чтение и запись в / из файлов рабочего стола.
Кто-нибудь знает, как исправить ошибку PMSessionBeginCGDocumentNoDialog () -61?(или вообще получить код и запустить ...) Спасибо!