4

現在のスクリーンショット (iPad ビューの場合) を印刷しようとすると、コンソール ウィンドウに次の奇妙なエラーが表示されます failed to find PDF header: %PDF not found

コンソール ウィンドウでこのエラーが発生するのはなぜでしょうか。プロジェクト全体で関連するものをPDF使用していないのに、関連する何かについて言及しているのはなぜですか。PDF

スクリーンショットを印刷するために使用するコードは次のとおりです。

  - (IBAction)print:(id)sender {

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
     else
         UIGraphicsBeginImageContext(self.view.bounds.size);

     [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

     UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

     UIGraphicsEndImageContext();


    //saving the file to documents directory

     NSData * imageData = UIImagePNGRepresentation(viewImage);
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     NSString *documentsDirectory = [paths objectAtIndex:0];
     documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@"Screenshot.png"];
     [imageData writeToFile:documentsDirectory atomically:YES];

     NSString *myFilePath = [documentsDirectory stringByAppendingPathComponent:@"Screenshot.png"];
    UIImage *screenShot = [UIImage imageWithData:imageData];
    NSData *myData = [NSData dataWithData:UIImagePNGRepresentation(screenShot)];

     self.pic = [UIPrintInteractionController sharedPrintController];
      if (self.pic && [UIPrintInteractionController canPrintData:myData] ) {

         self.pic.delegate = self;

        //filling up print info
         UIPrintInfo *printInfo = [UIPrintInfo printInfo];
         printInfo.outputType = UIPrintInfoOutputGeneral;
         printInfo.jobName = [myFilePath lastPathComponent];
         printInfo.duplex = UIPrintInfoDuplexLongEdge;
         self.pic.printInfo = printInfo;

         self.pic.showsPageRange = YES;
         self.pic.printingItem = myData;

        void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
         ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {

             if (!completed && error)
                 NSLog(@"FAILED! due to error in domain %@ with error code %u",
                                      error.domain, error.code);
             };

        [self.pic presentFromRect:self.printButton.frame inView:self.view animated:YES completionHandler: completionHandler];    // iPad


        }

    }

ファイル パス (Screenshot.png) は正しく、ドキュメント ディレクトリに正しく保存されます。

4

2 に答える 2

2

どの行がそのコンソール出力を引き起こしているかを正確に知ることができます。デバッガーでステップ実行して確認できます。

私の推測では、それは への呼び出し-[UIPrintInteractionController canPrintData:]です。そのメソッドのドキュメントを読むと、そのデータに PDF が含まれているかどうかを確認する必要があることがわかります。途中でメッセージを出力して、試行錯誤しているように見えます。

通常、iOS コンソールを監視するエンド ユーザーはいないため、これはそれほど重要なバグではなく、明らかに Apple が修正するほど重要ではありません。

于 2012-04-08T08:01:27.110 に答える
0

これは私にも起こりました。すべての行を確認したところ、これはデータを印刷しているためであることがわかりました。画像を直接印刷すると、この奇妙な警告は消えます。UIPrintInteractionController フレームワークの Apple のファイルから:

@NSCopying public var printingItem: AnyObject? // single NSData, NSURL, UIImage, ALAsset

printingItem は、上記の 4 つのタイプのいずれかになります。私の推測では、Apple はデフォルトでデータを PDF データとして受け取ります。明らかに、これは UIImage から生成したデータのヘッダー データではありません。

于 2016-06-08T22:07:07.993 に答える