我有一个GitHub repository,它允许用户从一些超文本标记语言保存一个分页的PDF到一个WebView和使用一个NSPrintOperation (特别是一个NSPrintSaveJob与showsPrintPanel设置为假),让用户保存该save panel到他们的Mac上的任何位置的save panel类似于默认的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()如何调整代码以将PDF保存到预设文件夹,而不是使其适应用户从保存面板中选择文件夹?
发布于 2018-08-02 02:01:26
这段代码在我的Swift4/Cocoa中可以完成你想要的,但是里面有更多的代码,因为它将WKWebView的内容呈现为8.5“x 11”的页面。
因此,对于您的应用程序,将对您的内容流/打印对象进行适当的调整,但打印操作的配置将是相同的,以获得您想要的“无对话”结果。
但是,要测试它,您只需将字符串转储到webview中并按原样使用代码即可。生成的文件出现在“user/document”目录的根目录中。
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)")
}
}https://stackoverflow.com/questions/40077017
复制相似问题