gpt4 book ai didi

swift - NSPrintOperation——保存到没有提示的位置

转载 作者:搜寻专家 更新时间:2023-10-30 22:17:22 25 4
gpt4 key购买 nike

我有一个 GitHub repository允许用户将分页 PDF 从一些 HTML 加载到 WebView 并使用 NSPrintOperation(具体来说,NSPrintSaveJobshowsPrintPanel 设置为 false)允许用户使用 save panel 将该 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()

我如何调整该代码以将 PDF 保存到预设文件夹而不是用户从保存面板选择的文件夹?

最佳答案

这段代码在 Swift 4/Cocoa 中为我工作以完成您想要的,但是其中还有更多代码,因为它将 WKWebView 的内容呈现为 8.5"x 11"的 PDF 页面。

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

但是,要对其进行测试,您只需将字符串转储到 WebView 中并按原样使用代码。生成的文件出现在“用户/文档”目录的根目录中。

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)")
}
}

关于swift - NSPrintOperation——保存到没有提示的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com