首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSPrintOperation-不提示保存到位置

NSPrintOperation-不提示保存到位置
EN

Stack Overflow用户
提问于 2016-10-17 08:35:31
回答 1查看 830关注 0票数 6

我有一个GitHub repository,它允许用户从一些超文本标记语言保存一个分页的PDF到一个WebView和使用一个NSPrintOperation (特别是一个NSPrintSaveJobshowsPrintPanel设置为假),让用户保存该save panel到他们的Mac上的任何位置的save panel类似于默认的NSSavePanel。但是,我正在试验代码,我想将创建的PDF保存到一个没有保存面板的特定文件夹(/Users/owlswipe/Downloads/)中。

我从WebView (带有保存面板)中保存PDF的代码目前是这样的:

代码语言:javascript
复制
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()

如何调整代码以将PDF保存到预设文件夹,而不是使其适应用户从保存面板中选择文件夹?

EN

回答 1

Stack Overflow用户

发布于 2018-08-02 02:01:26

这段代码在我的Swift4/Cocoa中可以完成你想要的,但是里面有更多的代码,因为它将WKWebView的内容呈现为8.5“x 11”的页面。

因此,对于您的应用程序,将对您的内容流/打印对象进行适当的调整,但打印操作的配置将是相同的,以获得您想要的“无对话”结果。

但是,要测试它,您只需将字符串转储到webview中并按原样使用代码即可。生成的文件出现在“user/document”目录的根目录中。

代码语言:javascript
复制
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)")
   }
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40077017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档