swift - 如何在 Mac 而不是 iPhone 上创建和打印屏幕外 SwiftUI 视图
问题描述
一个多星期以来,我一直在尝试解决我正在使用 Swift 和 SwiftUI 编写的 macOS 应用程序中的打印问题。
我需要打印一个视图,我已将其设为主窗口,但这对用户不起作用。数据可以来自文件或直接来自用户输入,因此可以是 1 到 100 个数据集。
因为我正在打印主窗口,所以应用程序在打印过程中无法使用,这是不可接受的。
理想的解决方案是在屏幕外创建视图,然后打印视图。这样,除了打印机输出的东西之外,用户永远不会看到它!
我试图找出如何打印不是主窗口的视图 - 没有成功,尝试创建第二个窗口设法创建窗口但不打印它!
发布代码没有意义,因为不知道我尝试过的几种方法中的哪一种可以工作,甚至不确定我现在尝试做的事情是否可行!
请在 Mac 上注意这一点,而不是 iPhone 或 iPad!
解决方案
这对我有用,是从@Willeke 评论中的链接借来的。它涉及转换为用于打印的位图。
let printInfo = NSPrintInfo()
let view = ContentView()
let contentRect = NSRect(x: 0, y: 0, width: 1080, height: 720) // these values will vary
let viewToPrint = NSHostingView(rootView: view)
viewToPrint.frame = contentRect
let bitMap = viewToPrint.bitmapImageRepForCachingDisplay(in: contentRect)!
viewToPrint.cacheDisplay(in: contentRect, to: bitMap)
let image = NSImage(size: bitMap.size)
image.addRepresentation(bitMap)
let imageView = NSImageView(frame: contentRect)
imageView.image = image
let printOperation = NSPrintOperation(view: imageView, printInfo: self.printInfo)
printOperation.showsPrintPanel = true
printOperation.showsProgressPanel = true
printOperation.run()
推荐阅读
- python - 合并具有不同时间戳的两个数据帧
- git - 如何在开发中创建新分支?
- flutter - Flutter:在 Firestore/实时数据库中存储和检索格式化文本
- python - 将浮点数转换为字符串而不会丢失信息 - Python
- javascript - 启用了消息包的 SignalR 核心,来自 javacript 的十进制反序列化失败
- php - 用于验证用户的自动 Symfony 协议不起作用
- docker - 从卷导出和加载redis数据库
- sql - 如何在 While 语句中使用 Join?
- vue.js - 将字体真棒导入vue项目
- r - R Shiny table如何在可扩展行中正确格式化html代码