xcode - 将自定义 View 打印到打印机时出现问题

标签 xcode cocoa printing nsview nsprintoperation

正在打印自定义 View ,我遇到了困难 - 希望有人能给我指出正确的方向。我已经阅读了所有苹果文档,但它不起作用。 我创建了一个简单的程序来测试打印,我对 NSView (MainView) 进行了子类化,并将以下内容添加到了 drawRect 方法中。

@implementation MainView


- (void)drawRect:(NSRect)dirtyRect{
  [super drawRect:dirtyRect];

  NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Hi"];

  [myString drawInRect:dirtyRect];

}

我在窗口上创建了一个自定义 View 并将其类设置为 MainView。

我运行该程序并显示文本 - 到目前为止效果良好。

当我从下拉列表中单击打印时,对话框将打开,预览将显示整个窗口 - 它包括带有最小、最大按钮的上部栏。所以,这是问题#1,为什么它有整个窗口而不是只有 View ?

其次,我在 MainView 中创建了一个打印例程,并将一个下拉菜单项链接到它。

-(IBAction) printTheView{

NSRect r = [self bounds];
[[NSPrintOperation printOperationWithView:self] runOperation];
[self dataWithPDFInsideRect:r];

}

这不会在打印预览中产生任何结果。我尝试了各种方法,但没有任何效果(例如: NSSavePanel 和 beginSheetForDirectory... 方法)。上面的代码是我最后一次尝试。

总而言之,我有两个问题: 1)为什么第一个打印整个窗口,而不是仅打印 View ? 2) 为什么我的自定义打印方法不起作用?

我已经成功打印了一个 NSTextView,但无法获取这个。任何建议/指示/踢将不胜感激。

谢谢。

[编辑]------

我已经部分工作了。我通过 NSObject 将自定义 View 绑定(bind)到 printTheView 方法。在 IB 中,我将下拉菜单项绑定(bind)到窗口上的自定义 View 对象。这有效。

但是,我无法以相同的方式将窗口上的按钮绑定(bind)到打印方法 - 即 CNTL CLICK 并从按钮拖动到对象。

想法?

最佳答案

我通过创建一个单独的 Controller 对象解决了这个问题。所以我有以下内容:

@interface ViewController : NSObject


@interface MainView  :  NSView

使 ViewController 成为 MainView 的委托(delegate),并为窗口上的自定义 View 创建一个 IBOutlet

IBOutlet MainView *view;

将此打印方法添加到ViewController:

-(IBAction)printToPDF:(id)sender{
[view printPDF];
}

向窗口添加了一个按钮,并将其链接到 ViewController 中的 printToPDF 方法。

MainView中,添加了以下打印方法:

-(void)printPDF{
NSRect r = [self bounds];
[[NSPrintOperation printOperationWithView:self] runOperation];
[self dataWithPDFInsideRect:r];
}

这一切都有效。然而,剩下的问题是为什么打印菜单项打印整个窗口而不是 View 。我已将其放入一个单独的问题中。

关于xcode - 将自定义 View 打印到打印机时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26578318/

相关文章:

xcode - 将 Swift 中 HTTP 请求返回的 NSData 转换为字符串

xcode - iOS 5.1和Xcode 4.3.1 CodeSign错误

ios - 无法使用 'valueForKey' 类型的参数列表调用 '(anyObject?)'

iOS:即使单元格可见,cellForItemAtIndexPath 也返回 nil

javascript - 在 JavaScript 中使用媒体查询或在 CSS 中使用 if/else 语句

css - 如何为 8.5x11 英寸打印页面设置 CSS 格式

swift - 更新 Facebook SDK 问题

objective-c - NSNotificationCenter - 使用多种方法观察通知名称

cocoa - CMP 计步器未运行

qt - 在执行之间保留/序列化 QPrinter (QPrintDialog)