2

Apple 인쇄 문서 예제를 사용하여 iPhone에서 Airprint 호환 프린터로 pdf를 인쇄합니다. 그러나 나는 아이폰에서 전체 페이지 인쇄를 얻지 못하고있다. 내가 얻는 그림을 보아라, 나는 pdf가 전체 종이 길이, 너비에 인쇄되어야한다. UIPrintInteractionController가 iPhone의 전체 페이지로 인쇄되지 않습니다.

enter image description here

내가 인쇄 기능을 위해 사용하고 코드는 애플 인쇄 샘플 응용 프로그램에서와 같이, 아래의 동일한 코드를 부여

,

UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController]; 
    if(!controller){ 
     NSLog(@"Couldn't get shared UIPrintInteractionController!"); 
     return; 
    } 

    UIPrintInteractionCompletionHandler completionHandler = 
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { 
     if(!completed && error){ 
      NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code); 
     } 
    }; 

    controller.delegate = self; 

    // Obtain a printInfo so that we can set our printing defaults. 
    UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
    // This application produces General content that contains color. 
    printInfo.outputType = UIPrintInfoOutputGeneral; 
    // We'll use the URL as the job name. 
    printInfo.jobName = [_filePath lastPathComponent]; 
    // Set duplex so that it is available if the printer supports it. We are 
    // performing portrait printing so we want to duplex along the long edge. 
    printInfo.duplex = UIPrintInfoDuplexLongEdge; 
    // Use this printInfo for this print job. 
    controller.printInfo = printInfo; 
    controller.printingItem = myData; 
    // Be sure the page range controls are present for documents of > 1 page. 
    controller.showsPageRange = YES; 

    // This code uses a custom UIPrintPageRenderer so that it can draw a header and footer. 
    APLPrintPageRenderer *myRenderer = [[APLPrintPageRenderer alloc] init]; 
// UIPrintPageRenderer *myRenderer = [[UIPrintPageRenderer alloc] init]; 
    // The APLPrintPageRenderer class provides a jobtitle that it will label each page with. 
// myRenderer.jobTitle = printInfo.jobName; 
    // To draw the content of each page, a UIViewPrintFormatter is used. 
    UIViewPrintFormatter *viewFormatter = [docWebView viewPrintFormatter]; 

#if SIMPLE_LAYOUT 

    UIFont *font = [UIFont fontWithName:@"Helvetica" size:HEADER_FOOTER_TEXT_HEIGHT]; 
    CGSize titleSize = [myRenderer.jobTitle sizeWithFont:font]; 
    myRenderer.headerHeight = myRenderer.footerHeight = titleSize.height + HEADER_FOOTER_MARGIN_PADDING; 
#endif 
    [myRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0]; 
    // Set our custom renderer as the printPageRenderer for the print job. 
    controller.printPageRenderer = myRenderer; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     [controller presentFromBarButtonItem:sender animated:YES completionHandler:completionHandler]; // iPad 
    } 
    else 
    { 
     docWebView.hidden = YES; 
     [controller presentAnimated:YES completionHandler:completionHandler]; // iPhone 
    } 
+0

에 대한 특정 포맷이 필요하지 않습니다? –

+0

PDF 파일은 내 전화의 문서 디렉토리에 로컬로 저장됩니다. –

+0

가져 가서 업로드 할 수 있습니까? 문서 작성 방식에 문제가있을 수 있습니까? –

답변

4

는 내가 드로잉으로 전체 페이지를 인쇄 할 PDF 파일을 생성 PDFcontext. 나는이 같은 호출을 설정 :

나는 크기 CGRectZero를 전달했기 때문에 문맥 기본 크기에서 오는
NSMutableData *pdfData = [NSMutableData data]; 
UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil); 

참고

/* 
    default pdf.. 
    8.5 X 11 inch 
    612 x 792 
    */ 

**이는 72dpi이며, 하지만 기본값입니다. 나는 해상도를 개선하기 위해 그리기 전에 축소 트릭이 있습니다

for (int page = 0 : page < numberPages : page ++){ 
UIGraphicsBeginPDFPage(); 
CGContextRef pdfContext = UIGraphicsGetCurrentContext(); 
CGFloat scaleFactor = 3.0; 
CGContextSaveGState(pdfContext); 
CGContextScaleCTM(pdfContext, 1.0/scaleFactor, 1.0/scaleFactor); 


///draw stuff 
/// context size is now (612.0 * 3.0 , 792.0 * 3.0) , i.e. resolution 72.0 * 3.0 dpi.. 
// 


CGContextRestoreGState(pdfContext); 

}//page drawing loop 


NSString *filePath = [[NSFileManager defaultManager] //etcetc make a path]; 
BOOL success = [pdfData writeToFile:filePath atomically:YES]; 

확인 그래서 지금 내가 가진에 대해 혼란을하지 않는 내가 UIPrintInteractionController

NSData *pdfData = [NSData dataWithContentsOfFile:[[self pdfView]filePath]]; 
    if ([UIPrintInteractionController canPrintData:pdfData]) { 

    UIPrintInteractionController *pr = [UIPrintInteractionController sharedPrintController]; 

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = 
    ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) { 
     if (!completed && error) NSLog(@"Print error: %@", error); 
    }; 

    pr.printingItem = pdfData; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     [pr presentFromRect:tool.frame inView:self.view animated:YES completionHandler:completionHandler]; 
    } else { 
     [pr presentAnimated:YES completionHandler:completionHandler]; 
    } 
    } 

참고로 직접 인쇄 내 PDF 파일을 UIPrintPageRenderer. 나는 그 수업에 대한 경험이 없기 때문에 나는 그것을 들여다 볼 필요가 전혀 없다. 하지만 머리글과 바닥 글을 만드는 공간이 있다면 공간을 만들기 위해 문서 크기를 줄여야 할 것입니다. 머리글과 바닥 글을 문서 자체에 통합 해보십시오. 행운을 빕니다

1
bestPaperForPageSize:withPapersFromArray: 

은 UIKit 지정된 페이지 크기 및 프린터에 특정 용지 크기-가능 영역의 조합에 따라 인쇄 작업에 대한 최고를 결정하는 인쇄 용지 오브젝트를 돌려줍니다.

+ (UIPrintPaper *)bestPaperForPageSize:(CGSize)pageSize withPapersFromArray:(NSArray *)paperList 

UIPrintInteractionController의 대리인은 UIPrintInteractionControllerDelegate 프로토콜에 선언 된 printInteractionController:choosePaper: 방법의 구현으로이 메소드를 호출 할 수 있습니다.

0

대신 UIViewPrintFormatter * viewFormatter = [docWebView viewPrintFormatter]; 사용 viewPrintFormatter * viewFormatter = [[UIPrintFormatter alloc] init];

당신이 PDF 파일에 대한 링크를 게시하시기 바랍니다 수 PDF 및 이미지

관련 문제