0

我有一个 NSDocument 后代,我想打印到单个页面 - 当页面宽于高时拉伸以适应并自动旋转。渲染视图根据内容确定其边界。rectForPage 只返回 [self bounds]; knowPageRange 设置 range.length = 1 和 range.location = 1 并返回 YES。使用下面的代码完成打印。

一切正常,除了自动旋转。在打印面板中,我看到了正确形状的预览(宽于高,正确的尺寸等),但是当我打印时,页面已安装,但在纵向模式下,不必要地缩小图像。如果我没有设置 printInfo.paperSize,它会自动旋转 OK,但不会缩放,而是会剪切图像。任何想法?

附加信息:打印面板中的“查看 PDF”在预览中显示页面确定。从预览打印,然后在预览的打印面板中显示旋转的图像以匹配纸张纵向方向(即:横向图像本身出现旋转)。这与我在打印面板中显示未旋转的情况不同。从预览的打印面板打印然后做正确的事情。

- (NSPrintOperation *)printOperationWithSettings:(NSDictionary *)printSettings error:(NSError **)outError {
    MindMapRenderingView *renderingView = [[MindMapRenderingView alloc] initWithMindMap:_mindMap 
                                                                          printJobTitle:[_mindMap singleLineTitle]];
    NSSize pageSize = [renderingView bounds].size;
    NSPrintOperation *printOperation = [NSPrintOperation printOperationWithView:renderingView
                                                                      printInfo:[self printInfo]];
    [renderingView release];

    NSPrintInfo* printInfo = [printOperation printInfo];
    [[printInfo dictionary] addEntriesFromDictionary:printSettings];

    if (isLandscape)
        [printInfo setOrientation:NSLandscapeOrientation];
    else
        [printInfo setOrientation:NSPortraitOrientation];

    [printInfo setPaperSize:pageSize];

    [printInfo setHorizontalPagination:NSFitPagination];
    [printInfo setVerticalPagination:NSFitPagination];

    return printOperation;
}
4

1 回答 1

0

还没有找到自动旋转的方法,但经过更多试验后,我想出了模仿预览打印风景 pdf 方式的解决方案:我旋转用于绘制输出的 NSView 的框架。在 drawRect 中:我还使用 NSAffineTransform 绘制旋转的输出。这给出了所需的结果。唯一的缺点是使用打印面板中的“查看 PDF”现在也会显示旋转的 pdf。

于 2012-12-12T07:43:06.160 回答