1

テキスト (つまり、UILabel) といくつかの黒い線だけを持つ単純な UIView があるとします。

ここに画像の説明を入力

これがまさにそのUIViewを印刷する方法です...

それをUIImageとしてレンダリングし、それを印刷します...

- (IBAction)printB:(id)sender
    {
    // we want to print a normal view ... some UILabels, maybe a black line

    // in this technique, depressingly we CREATE AN IMAGE of the view...

    // step 1. make a UIImage, of the whole view.

    UIGraphicsBeginImageContextWithOptions(self.printMe.bounds.size, NO, 0.0);

    // [self.printMe.layer renderInContext:UIGraphicsGetCurrentContext()];
    // UIImage *asAnImage = UIGraphicsGetImageFromCurrentImageContext();
    // .... or, more futuristically.....
    [self.printMe drawViewHierarchyInRect:self.printMe.bounds
        afterScreenUpdates:NO];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    // step 2. choose grayscale, etc

    UIPrintInfo *info = [UIPrintInfo printInfo];
    info.orientation = UIPrintInfoOrientationPortrait;
    info.outputType = UIPrintInfoOutputGrayscale;

    // step 3, print that UIImage

    UIPrintInteractionController *pic =
       [UIPrintInteractionController sharedPrintController];
    pic.delegate = self;
    //pic.printingItem = asAnImage;
    pic.printingItem = snapshotImage;
    pic.printInfo = info;

    UIPrintInteractionCompletionHandler completionHandler =
    ^(UIPrintInteractionController *pic, BOOL completed, NSError *error)
        {
        if (error)
            NSLog(@"failed... %@ %ld", error.domain, (long)error.code);
        if (completed)
            NSLog(@"completed yes");
        else
            NSLog(@"completed no");
        };     

    [pic presentAnimated:YES completionHandler:completionHandler];
    }

しかし、これはあなたにがらくたの結果をもたらします。タイポグラフィを印刷するのはばかげた方法です。それはポストスクリプトか何かとして送られているはずです。

iPadの画面で...

ここに画像の説明を入力

印刷すると..

ここに画像の説明を入力

もちろん、Retina iPad を使用すれば多少は良くなりますが、それは問題ではありません。テキスト情報、黒い線をイメージとして印刷するのはばかげています。

さて、あなたはこのような UIView を印刷できると思うでしょう...

pic.printFormatter = [someUIView viewPrintFormatter];

しかし、私が何をしようとしても、それを機能させることはできません。

誰もこれについて何か持っていますか?ありがとう!

PS - iOS では、最近、renderInContext の使用からスナップショット呼び出しの使用に変更したことに注意してください。ここでの問題にはまったく違いはありません、乾杯。

4

1 に答える 1