大佬教程收集整理的这篇文章主要介绍了无法使用 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()
@H_616_7@上面的代码工作正常,最小记录数为 30 -40 行,但当记录数约为 100 或超过 100 时,它只打印前几条记录,其余页面为空。任何帮助将不胜感激。我附上了 tablevIEw 和 Print预览屏幕截图以更好地理解。
- tableVIEw 记录: Table view screen shot
- 打印预览: Print preview screen shot 你可以在上面的屏幕截图中看到只有前几页有记录的其余部分是空的。如果我滚动表格视图在这种情况下整个打印预览是空的。 Empty print preview screen shot
我无法理解我做错了什么。
解决方法
我遇到了同样的问题。我相信这是由 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_605_11845@E) var colorscheR_605_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_605_11845@e == .light ? NSAppearance(named: .aqua) : NSAppearance(named: .darkAqua) reportsDetailVC.tableView.usesAlternaTingRowBACkgroundColors = true } DispatchQueue.main.async {viewToPrint = reportsDetailVC.tableView} } }
@H_616_7@大佬总结
以上是大佬教程为你收集整理的无法使用 NStableView Data Cocoa App 打印多页打印预览全部内容,希望文章能够帮你解决无法使用 NStableView Data Cocoa App 打印多页打印预览所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。