Cocoa swift macOS 打印 html 到 pdf
Posted
技术标签:
【中文标题】Cocoa swift macOS 打印 html 到 pdf【英文标题】:Cocoa swift macOS Print html to pdf 【发布时间】:2018-05-28 09:55:40 【问题描述】:我想从 html 内容生成一个 pdf 文件。 (从 html 模板生成发票) 我想指出,我是一个swift-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()
基于此 *** 问题/答案:***Answer
我不得不将代码“翻译”为 swift4 - 这里很可能出现任何错误 运行代码时,我得到以下日志(按此顺序):
-
NSURLConnection 完成但出现错误 - 代码 -1002
打印失败,因为 PMSessionBeginCGDocumentNoDialog() 返回 -61。
NSURLConnection 完成但出现错误 - 代码 -1002
PMSessionBeginCGDocumentNoDialog() -61 -> 根据this表示我在某个位置没有写权限(写权限错误)
我尝试切换沙盒模式,并授予应用程序读取和写入桌面文件的权限。
有人知道如何修复 PMSessionBeginCGDocumentNoDialog() -61 错误吗? (或者通常让代码启动并运行......) 谢谢!
【问题讨论】:
【参考方案1】:更多研究得出以下答案: SO answer
指的是这个 GitHub 项目 GitHub Swift 3 PDFCreator
github项目中的代码解决了我的错误!完美运行。
【讨论】:
以上是关于Cocoa swift macOS 打印 html 到 pdf的主要内容,如果未能解决你的问题,请参考以下文章
使用 PDFOutline 在 Swift/Cocoa 中将 TOC 添加到 PDFDocument
在 Cocoa App Swift [Mac OS] 中显示在 containerView 内的 NSViewController 不会与 Container 的边界对齐
如何使用 Storyboards/Cocoa 在 Swift 3.x 中引用视图的窗口