owl*_*ipe 6 macos cocoa pdf-generation swift swift3
我有一个GitHub的仓库,它允许用户通过加载到一个WebView中,并使用一些HTML保存在Mac上的分页PDF的NSPrintOperation(具体而言,NSPrintSaveJob与showsPrintPanel设置为false)以让用户保存该PDF的任何位置他们的Mac上类似于默认的保存面板NSSavePanel.但是,我正在尝试使用代码,而我想将创建的PDF保存到特定文件夹(/Users/owlswipe/Downloads/)而不使用保存面板.
我从WebView(带有保存面板)保存PDF的代码目前是这样的:
let printOpts: [String : AnyObject] = [NSPrintJobDisposition:NSPrintSaveJob as AnyObject]
let printInfo: NSPrintInfo = NSPrintInfo(dictionary: printOpts)
printInfo.paperSize = NSMakeSize(595.22, 841.85)
let printOp: NSPrintOperation = NSPrintOperation(view: webView.mainFrame.frameView.documentView, printInfo: printInfo)
printOp.showsPrintPanel = false
printOp.showsProgressPanel = false
printOp.run()
Run Code Online (Sandbox Code Playgroud)
如何调整该代码以将PDF保存到预设文件夹而不是用户从保存面板中选择的文件夹?
这段代码正在 Swift 4/Cocoa 中为我工作,以完成您想要的任务,但是其中还有更多代码,因为它将 WKWebView 的内容渲染为 PDF 的 8.5" x 11" 页面。
因此,对于您的应用程序,将对您的内容流/打印对象进行适当的调整,但打印操作的配置将相同,以获得您想要的“无对话框”结果。
但是,要测试它,您可以将字符串转储到 Web 视图中并按原样使用代码。生成的文件出现在“user/documents”目录的根目录中。
static func createPDF(htmlString: String, streamId: String = "someStream") {
let webView = WebView()
webView.mainFrame.loadHTMLString(htmlString, baseURL: nil)
let when = DispatchTime.now() + 1
DispatchQueue.main.asyncAfter(deadline: when) {
let directoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let directoryURLStr = directoryURL.absoluteString+"\(streamId).pdf"
let outputFilePath = URL(string: directoryURLStr)
let printOpts: [NSPrintInfo.AttributeKey : Any] = [
NSPrintInfo.AttributeKey.jobDisposition : NSPrintInfo.JobDisposition.save,
NSPrintInfo.AttributeKey.jobSavingURL : outputFilePath
]
let printInfo: NSPrintInfo = NSPrintInfo(dictionary: printOpts)
let baseMargin: CGFloat = 9.0; // .125"
printInfo.paperSize = NSMakeSize(612, 792); // 8.5" x 11/2"
printInfo.topMargin = baseMargin
printInfo.leftMargin = baseMargin
printInfo.rightMargin = baseMargin
printInfo.bottomMargin = baseMargin
let printOp: NSPrintOperation = NSPrintOperation(view: webView.mainFrame.frameView.documentView, printInfo: printInfo)
printOp.showsPrintPanel = false
printOp.showsProgressPanel = false
printOp.run()
Swift.print("Document complete: \(outputFilePath!.absoluteString)")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |