0

単一のページに印刷したいNSDocumentの子孫があります。ページが高さよりも広い場合は、収まるように引き伸ばされ、自動回転されます。レンダリングビューは、コンテンツに基づいて境界を決定します。rectForPageは単に[自己境界]を返します。knowsPageRangeは、range.length=1およびrange.location=1を設定し、YESを返します。印刷は以下のコードを使用して行われます。

すべてが機能し、自動回転を実行します。印刷パネルでは、プレビューが正しい形(高さよりも広い、正しいサイズなど)で表示されますが、次に印刷すると、ページはフィットしますが、縦向きモードでは、画像を不必要に縮小します。printInfo.paperSizeを設定しない場合、自動回転はOKですが、拡大縮小せず、代わりに画像をクリップします。何か案が?

追加情報:印刷パネルの[PDFの表示]には、プレビューで[OK]ページが表示されます。プレビューから印刷すると、プレビューの印刷パネルで回転した画像が紙のポトレイトの向きに一致するように表示されます(つまり、横向きの画像自体が回転して表示されます)。これは、印刷パネルに回転せずに表示される私の場合とは異なります。プレビューの印刷パネルから印刷すると、正しい処理が行われます。

- (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

自動回転する方法は見つかりませんでしたが、さらに実験を重ねた結果、Preview がランドスケープ PDF を印刷する方法を模倣するソリューションを思いつきました。出力の描画に使用される NSView のフレームを回転させます。drawRect では、NSAffineTransform を使用して回転した出力も描画します。これにより、必要な結果が得られます。唯一の欠点は、印刷パネルから「PDF を表示」を使用すると、PDF も回転して表示されることです。

于 2012-12-12T07:43:06.160 に答える