大佬教程收集整理的这篇文章主要介绍了无法使用 NStableView Data Cocoa App 打印多页打印预览,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将 NStableVIEw 数据打印为多页打印预览,但打印预览仅显示前几条记录其余页面为空。我正在使用以下代码打印 NStableVIEw 数据。
let prinTinfo = nsprinTinfo.shared
prinTinfo.paperSize = NSSize(wIDth: self.reporttablevIEw.frame.wIDth,height: 800.00)
prinTinfo.verticalPagination = .automatic
let operation: nsprintoperation = nsprintoperation(vIEw: self.reporttablevIEw,prinTinfo: prinTinfo)
operation.printPanel.options.insert([.showsPaperSize,.showsOrIEntation])
operation.run()
上面的代码工作正常,最小记录数为 30 -40 行,但当记录数约为 100 或超过 100 时,它只打印前几条记录,其余页面为空。任何帮助将不胜感激。我附上了 tablevIEw 和 Print预览屏幕截图以更好地理解。
我无法理解我做错了什么。
我遇到了同样的问题。我相信这是由 AppKit 用来有效显示 NSTableViews 的方法引起的。这似乎优化了,即减少了大型 NSTableViews 的内存负载,只为视图的大约 3 个“页面”生成显示数据。要打印整个 NSTableView,请在打印前将 NSTableView 实例属性 var usesStaticContents: Bool { get set }
设置为 true(并在打印完成后将其值返回为 false)。我已经在一张 33 x A4 横向页面的表格上成功地测试了这个,它工作正常(虽然在显示打印面板之前需要大约 5 秒)。
这是对我有用的代码:
struct ReportsDetailView: View {
@Binding var reportNodes: [ReportNode]
@State private var viewToPrint = NSView()
@State private var prinTing = false
var body: some View {
VStack {
ReportsDetailTableVC(reportNodes: $reportNodes,viewToPrint: $viewToPrint,prinTing: $prinTing)
HStack {
Spacer()
Button("Print Report") {
prinTing = true
let scale: CGFloat = 800/viewToPrint.frame.width
let prinTinfo = NSPrinTinfo()
prinTinfo.horizontalPagination = .automatic
prinTinfo.verticalPagination = .automatic
prinTinfo.isVerticallyCentered = true
prinTinfo.isHorizontallyCentered = true
prinTinfo.printer = NSPrinter(name: NSPrinter.printerNames[0])!
prinTinfo.paperSize = NSSize(width: 595.28,height: 841.89)
prinTinfo.topMargin = 10
prinTinfo.bottomMargin = 10
prinTinfo.leftMargin = 10
prinTinfo.rightMargin = 10
prinTinfo.orientation = .landscape
prinTinfo.scalingFactor = scale
let printOperation = NSPrintOperation(view: viewToPrint,prinTinfo: prinTinfo)
printOperation.run()
prinTing = false
}
.disabled(prinTing)
}
.padding(10)
}
.frame(maxWidth: .infinity,maxHeight: .infinity)
}
}
struct ReportsDetailTableVC: NSViewControllerRepresentable {
@Environment(\.colorscheR_289_11845@E) var colorscheR_289_11845@e
@Binding var reportNodes: [ReportNode]
@Binding var viewToPrint: NSView
@Binding var prinTing: Bool
func makeNSViewController(context: Context) -> some NSViewController {
let reportsDetailVC = ReportsDetailTableViewController()
return reportsDetailVC
}
func updateNSViewController(_ nsViewController: NSViewControllerType,context: Context) {
guard let reportsDetailVC = nsViewController as? ReportsDetailTableViewController else {return}
reportsDetailVC.setContents(reportNodes: reportNodes)
if prinTing {
reportsDetailVC.tableView.scrollRowToVisible(0)
reportsDetailVC.tableView.usesStaticContents = true
reportsDetailVC.tableView.appearance = NSAppearance(named: .aqua)
reportsDetailVC.tableView.usesAlternaTingRowBACkgroundColors = false
}
else {
reportsDetailVC.tableView.usesStaticContents = false
reportsDetailVC.tableView.appearance = colorscheR_289_11845@e == .light ? NSAppearance(named: .aqua) : NSAppearance(named: .darkAqua)
reportsDetailVC.tableView.usesAlternaTingRowBACkgroundColors = true
}
DispatchQueue.main.async {viewToPrint = reportsDetailVC.tableView}
}
}
以上是大佬教程为你收集整理的无法使用 NStableView Data Cocoa App 打印多页打印预览全部内容,希望文章能够帮你解决无法使用 NStableView Data Cocoa App 打印多页打印预览所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。