2012-03-24 4 views
1

Ich versuche, ein PDF-Dokument zu drucken, das von einem Webserver aus meiner iPad App gezogen wurde. Das Dokument befindet sich im Querformat (mit Vorschau geprüft), aber der UiPrinterInteractionController druckt das Dokument im Hochformat.UIPrintInteractionController in Querformat

Ich setze printInfo.orientation = UiPrintInfoOrientationLandscape;, aber es scheint nicht zu helfen.

Ich versuche, das Dokument in den Druckersimulator zu drucken. Wenn ich in den Ordner gehe, wo die Dokumente gespeichert sind, bin ich zu Dokumenten gekommen. Eine, die Originaldatei, eine die gedruckte.

Die Originaldatei ist im Querformat und auf die richtige Weise ausgerichtet. Aber die zweite, die Druckausgabe, ist im Hochformat und die Ränder sind ausgeschnitten.

Irgendwelche Ideen? Vielen Dank für Hilfe, Julian

+0

Ich habe das Drucken mit einem anderen Drucker getestet. Wenn ich einen der _InkJet_ Drucker anstelle von _Laser_ nehme, funktioniert es einfach wie Charme! Leider habe ich keinen AirPrinter, also kann ich nicht wirklich testen. Weiß jemand dieses Problem? –

Antwort

1

Salute,

Ich denke, wir PDF-Daten manuell vor dem Senden an den Drucker drehen kann.

Hier ist ein Code unten (Entschuldigung eigentlich nicht wirklich getestet), die ich hoffe, könnte hilfreich sein (nicht sicher, es ist aber eine beste Lösung, aber trotzdem). Stellen Sie sicher, dass "QuartzCore/QuartzCore.h" importiert wird.

- (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

Dies wird nicht funktionieren. Es ist eine Umgehung für einige Leute, sicher! Aber mein Problem ist, dass ein Drucker es richtig druckt und ein anderes es falsch druckt ... Ich denke, es ist ein Druckerproblem und es gibt keine Möglichkeit zu reparieren –

+0

Aber danke, Mann! –

+0

Hallo, ja ich habe Ihr Problem im Simulator mit funktionierendem InkJet und nicht funktionierendem Laser konfrontiert. Eigentlich versucht, auf echten Weltdrucker zu drucken und kein Glück, Landschaft pdfs sind noch nicht gedreht, um das Papier zu passen. Also, ich habe versucht, auf printInfo.orientation nicht weiterzuleiten, da es nicht gut funktioniert und rotieren Inhalt des Dokuments vor dem Drucken und es hat gut funktioniert. Jetzt werden alle meine PDFs korrekt auf Papier und Lasersimulatoren gedruckt. Aber vielleicht habe ich etwas verpasst und es ist nicht das, was du brauchst. – themused