菜鸟教程小白 发表于 2022-12-13 05:20:29

ios - UIView 的空中打印生成白页


                                            <p><p>我有以下打印代码,我希望它打印该类所附加到的 ViewController 的 UIVIew,</p>

<p>但打印只会生成空白页(和两页而不是一页)</p>

<p>我是 xcode 的新手,你能帮忙找出错误吗?</p>

<pre><code>UIPrintInteractionController *pc = [UIPrintInteractionController
                                        sharedPrintController];
    UIPrintInfo *printInfo = ;
    printInfo.outputType = UIPrintInfoOutputGeneral;
    printInfo.jobName = @&#34;Print file&#34;;
    pc.printInfo = printInfo;
    UIViewPrintFormatter *Pformatter = ;
    pc.printFormatter = Pformatter;

    UIPrintInteractionCompletionHandler completionHandler =
    ^(UIPrintInteractionController *printController, BOOL completed,
      NSError *error) {
      if(!completed &amp;&amp; error){
            NSLog(@&#34;Print failed - domain: %@ error code %u&#34;, error.domain,
                  error.code);
      }
    };
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
      [pc presentFromBarButtonItem:self.btnPrint animated:YES
                   completionHandler:completionHandler];
    } else {
      ;
    }
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>FWIW 这是从 iPad/iPhone 的任何 UIView 打印位图的完整工作代码</p>

<p><strong>注意,这只会打印位图。</strong></p>

<p>请注意,(奇怪的是)iOS 似乎不包括将 UIView 渲染到 postscript 的概念.. <a href="https://stackoverflow.com/questions/24479985" rel="noreferrer noopener nofollow">Print a UIView, but NOT by rendering as a bitmap image</a> </p>

<p>换句话说,以下内容在 iOS 中似乎还没有意义......</p>

<pre><code>UIViewPrintFormatter *f = ;
</code></pre>

<p>无论如何,以下内容将打印(仅作为位图)绝对任何 UIView...</p>

<p>您只需使用 <strong>renderInContext:</strong> 或,</p>

<p>对于更现代的代码,</p>

<p><strong>drawViewHierarchyInRect: 和 UIGraphicsGetImageFromCurrentImageContext() 的组合</strong></p>

<pre><code>- (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);

    // ;
    // 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 = ;
    info.orientation = UIPrintInfoOrientationPortrait;
    info.outputType = UIPrintInfoOutputGrayscale;

    // step 3, print that UIImage

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

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

    ;
    }
</code></pre>

<p>这真的很简单,幸运的是。但它是一个渲染的位图图像。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UIView 的空中打印生成白页,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19725033/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19725033/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UIView 的空中打印生成白页