4

ユーザーに、写真を 4x6 と 5x7 で印刷するオプションを提供したいと考えています。UIImage を 4x6 インチで印刷するのは簡単です。

UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputPhoto;

UIPrintInteractionController *printInteractionController = [UIPrintInteractionController sharedPrintController];

printInteractionController.printInfo = printInfo;
printInteractionController.printingItem = self.myImage;

ただし、UIImage も 5x7 で印刷する必要があります。これを行う方法についてのアイデアはありますか?コードサンプルを提供してください。

ありがとう!

4

1 に答える 1

6

まず、このメソッドを実装します。

- (UIPrintPaper *) printInteractionController:(UIPrintInteractionController *)printInteractionController choosePaper:(NSArray *)paperList {

// This will give us all the available paper sizes from the printer
for(int i = 0; i < paperList.count; i++) {
    UIPrintPaper* paper = [paperList objectAtIndex:i];
    NSLog(@"List paper size %f,%f",paper.paperSize.width, paper.paperSize.height);
}

// You're going to use precise numbers from the NSLog list here
CGSize pageSize = CGSizeMake(360, 504);

// Give our CGSize to the bestPaperForPageSzie method to try to get the right paper
UIPrintPaper* paper = [UIPrintPaper bestPaperForPageSize:pageSize withPapersFromArray:paperList];

// See if we got the right paper size back
NSLog(@"iOS says best paper size is %f,%f",paper.paperSize.width, paper.paperSize.height);
return paper;
}

.h ファイルのデリゲートに準拠することを忘れないでください。

@interface yourViewController : UIViewController <UIPrintInteractionControllerDelegate>

AirPrint の [印刷] ボタンを押すと、プリンターがサポートする正確な用紙サイズのリストが表示されます。それをテストして、利用可能な数字を確認してください。

次に、CGSize pageSize をログに記録された値のいずれかに変更します。最終的な NSLog の「iOS が最適な用紙サイズを示しています」が、4x6、レター サイズ、またはその他の不要なサイズではなく、選択したポイント サイズを示したときに、それが機能するかどうかがわかります。

用紙リストのサイズを使用する必要がある理由は、UIPrintPaper の bestPaperForPageSize メソッドがその名前が示すように機能しないように見えるためです。その名前に基づいて、近い入力を処理し、似たようなものを見つけようとするだろうと思うでしょう。ただし、サポートされている用紙サイズのリストから明示的に一致するものを指定した場合にのみ、正しい用紙サイズが返されます。

私の問題は、5x7 に適したポイント サイズに関係なく、常にレターを選択しているように見えることでした。実際のポイント サイズは、地域やプリンターによって異なります。

用紙リストから一致する番号を入力した後でのみ、PDF を 5x7 に印刷できます。

幸運を!

于 2013-10-28T22:49:20.503 に答える