2012-03-24 18 views
1

私のiPadアプリからWebサーバーから取得したPDF文書を印刷しようとしています。 ドキュメントはランドスケープ(プレビューで証明)ですが、UiPrinterInteractionControllerはドキュメントをポートレートモードで印刷します。UIPrintInteractionController in landscape

私はprintInfo.orientation = UiPrintInfoOrientationLandscape;と設定しましたが、それは役に立たないようです。

ドキュメントをプリンタシミュレータに印刷しようとしました。文書が保存されているフォルダに入ると、私は文書に行きました。 1つは元のファイル、もう1つは印刷されたファイルです。

元のファイルは横向きで、正しい向きになっています。しかし、2番目のプリント出力はポートレートであり、境界線はカットされています。

アイデア?助けを おかげで、ジュリアン

+0

私は別のプリンタで印刷をテストしました。 _Laser_の代わりに_InkJet_プリンタの1つを使用すると、それはちょうどチャームのように機能します!残念ながら私はAirPrinterを持っていないので、私は実際にテストすることはできません。誰もこの問題を知っていますか? –

答えて

1

敬礼、

は、私たちは、プリンタに送信する前に、手動でPDFデータを回転させることができますね。

以下は実際にテストされていない(申し訳ありませんが実際にはテストされていない)コードですが、これは参考になると思います。 "QuartzCore/QuartzCore.h"がインポートされていることを確認してください。

- (NSData *) prepareForPrinting:(NSData *) data 
{ 
    NSData *result = nil; 
    CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((CFDataRef)data); 
    CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(dataProvider); 
    CGPDFPageRef page = CGPDFDocumentGetPage(document, 1); 
    CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); 

    if (pageRect.size.width > pageRect.size.height) 
    { 
     GLuint w = pageRect.size.width; 
     GLuint h = pageRect.size.height; 
     pageRect.size.width = h; 
     pageRect.size.height = w; 
     CFMutableDataRef mutableData = CFDataCreateMutable(NULL, 0); 
     CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(mutableData); 
     CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &pageRect, NULL); 
     int numPages = CGPDFDocumentGetNumberOfPages(document); 

     if (numPages > 0) 
     { 
      for (int i = 0; i < numPages; i++) 
      { 
       page = CGPDFDocumentGetPage(document, i + 1); 
       CGPDFContextBeginPage(pdfContext, NULL); 
       CGContextRotateCTM(pdfContext, M_PI_2); 
       CGContextTranslateCTM(pdfContext, 0, -pageRect.size.width); 
       CGContextDrawPDFPage(pdfContext, page); 
       CGPDFContextEndPage(pdfContext); 
      } 
     } 
     else 
     { 
      NSLog(@"Invalid PDF"); 
     } 
     CGContextRelease(pdfContext); 
     result = [NSData dataWithData:(NSData *)mutableData]; 
     CGDataConsumerRelease(dataConsumer); 
     CFRelease(mutableData); 
    } 
    else 
    { 
     result = data; 
    } 
    CGDataProviderRelease(dataProvider); 
    CGPDFDocumentRelease(document); 

    return result; 
} 
+0

これは動作しません。それは確かに、いくつかの人々のための回避策です!しかし、私の問題は、1つのプリンタが正しい方法で印刷し、もう1つが間違って印刷することです...プリンタの問題だと思っています。修正する方法はありません。 –

+0

しかし、ありがとう、男! –

+0

こんにちは、はい、私はあなたの問題に直面してInkJetを動作させ、レーザーを動作させませんでした。実際には実世界のプリンタで印刷しようとしましたが、ランドスケープではありません。ランドスケープpdfはまだ用紙に合わせて回転しません。ですから、printInfo.orientationをリレーしないようにしました。うまく動作せず、印刷前にdocの内容が回転していて、うまくいきました。今ではすべての私のpdfは紙とレーザーのシミュレーターに正しい方向で印刷されています。しかし、多分私は何かを見逃して、それはあなたが必要なものではありません.. – themused

関連する問題