首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于打印冗长复杂报表的MacOS / appkit NSPrint逻辑

用于打印冗长复杂报表的MacOS / appkit NSPrint逻辑
EN

Stack Overflow用户
提问于 2020-04-17 09:13:57
回答 1查看 79关注 0票数 1

我们有一个包含许多报告的应用程序,其中一些报告具有复杂的打印循环。

回到过去(IE PowerPlant、Carbon、Core print ),我们常常创建具有某种BeginPage() / EndPage()对的打印循环。通常,这些对被嵌入到报告打印循环逻辑中。

最终的结果是,许多报表在打印前没有分页,而是在打印时分页。这些报表迭代了数以千计的对象并填满了尽可能多的页面,然后调用EndPage(),然后通过调用BeginPage()继续下一页,同时保持正在进行的打印报表的复杂“状态”。

随着大部分核心打印被弃用,似乎使用NSPrint的逻辑,打印报表驱动分页的方法是不可能的。NSPrintOperation非常希望能够请求一个完整的页面来绘制自定义的NSView的drawRect,并且自定义的NSView最好能够从任何页面开始。这是否意味着每个报告都必须预先分页?

似乎有一种不同的方法是“自动”分页的一部分:

代码语言:javascript
复制
 - (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;

如果我正确地阅读了文档,假设我有一份10页的报告,其中我需要找到合适的位置来划分。看起来我可以将该报告视为一个长视图,然后在drawRect中调用上面的方法,导致我正在绘制的页面变短,从而将材料推到下一页。

文档没有给出这些调整将如何在数十(或数百)个页面上传播的详细信息。

除了上面描述的被动方法之外,有没有其他方法可以从报表生成代码中驱动打印和分页?

EN

回答 1

Stack Overflow用户

发布于 2020-04-17 20:35:23

如果我没有读错文档,假设我有一份10页的报告,其中我需要找到合适的位置来划分。看起来我可以把这份报告当做一个长远的观点,

是,

代码语言:javascript
复制
 - (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;

然后,当我在drawRect中时,

调用上面的方法

不,文档是这样说的:

由子类重写的

,用于在自动分页期间调整页面高度。此方法由print:调用。视图可以提高下边缘并在newBottom中返回新值,从而防止文本行等项在页面上分割。

文档没有给出这些调整将如何在数十(或数百)个页面上传播的详细信息。

我假设下面的页面向上移动。

除了上面描述的被动方法之外,有没有其他方法可以从报表生成代码中驱动打印和分页?

是,覆盖

代码语言:javascript
复制
- (BOOL)knowsPageRange:(NSRangePointer)range;

代码语言:javascript
复制
- (NSRect)rectForPage:(NSInteger)page;

这需要对报告进行预分页。

请参阅Selecting the Page Bounds for Content That Exceed a Single Page

Printing Programming Guide for Mac中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61262590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档