IOS 从 WebView 和 Page 打印 PDF 略有偏移 [英] IOS Printing PDF from WebView and Page is slightly offset

查看:21
本文介绍了IOS 从 WebView 和 Page 打印 PDF 略有偏移的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用下面的代码从名为webby"的 Web 视图打印 PDF.当我打印 PDF 时,页面输出在顶部显示上一页.换句话说,如果我打印第 3 页,它会在第 3 页显示第 2 页的最后一行,而第 3 页的底部不打印.关于我做错了什么或应该改变的任何想法?

I am using the code below to print a PDF from a Webview called "webby". When I print the PDF, the page output shows the previous page on top. In other words, if I print page 3, it shows the last line of page 2 on page 3, and the bottom of page 3 does not print. Any ideas on what I am doing wrong or should change?

UIPrintInteractionController *print = [UIPrintInteractionController sharedPrintController];


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

printInfo.duplex = UIPrintInfoDuplexLongEdge;
print.printInfo = printInfo;
print.showsPageRange = YES;

UIViewPrintFormatter *viewFormatter = [self.webby viewPrintFormatter];
viewFormatter.startPage = 0;
print.printFormatter = viewFormatter;


UIPrintInteractionCompletionHandler completionHandler = ^(UIPrintInteractionController *printInteractionController, BOOL completed, NSError *error) {};

[print presentAnimated:YES completionHandler:completionHandler];

推荐答案

我使用了几乎相同的代码,只是做了一点点改动

I have used the near about same code just little bit changes

你可以试试下面的代码吗

can you please try below code

- (IBAction)printWebPage:(id)sender
{
    UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
    if(!controller){

        return;
    }

    UIPrintInteractionCompletionHandler completionHandler = 
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
        if(!completed && error){

        }
    };


    // 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 = @"";
    // 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;

    // 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.
    MyPrintPageRenderer *myRenderer = [[MyPrintPageRenderer alloc] init];
    // The MyPrintPageRenderer 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 = [webviwReport viewPrintFormatter];

#if SIMPLE_LAYOUT
    /*
     For the simple layout we simply set the header and footer height to the height of the
     text box containing the text content, plus some padding.

     To do a layout that takes into account the paper size, we need to do that 
     at a point where we know that size. The numberOfPages method of the UIPrintPageRenderer 
     gets the paper size and can perform any calculations related to deciding header and
     footer size based on the paper size. We'll do that when we aren't doing the simple 
     layout.
     */
    UIFont *font = [UIFont fontWithName:@"Helvetica" size:10]; 
    CGSize titleSize = [myRenderer.jobTitle sizeWithFont:font];
    myRenderer.headerHeight = myRenderer.footerHeight = titleSize.height + 5;
#endif
    [myRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];
    // Set our custom renderer as the printPageRenderer for the print job.
    controller.printPageRenderer = myRenderer;
    [myRenderer release];

    // The method we use presenting the printing UI depends on the type of 
    // UI idiom that is currently executing. Once we invoke one of these methods
    // to present the printing UI, our application's direct involvement in printing
    // is complete. Our custom printPageRenderer will have its methods invoked at the
    // appropriate time by UIKit.

    //    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    //        [controller presentFromBarButtonItem:printButton animated:YES completionHandler:completionHandler];  // iPad
    //    else
    //        [controller presentAnimated:YES completionHandler:completionHandler];  // iPhone
    [controller presentFromRect:CGRectMake(btnReportPrint.frame.origin.x, btnReportPrint.frame.origin.y+40, btnReportPrint.frame.size.width, btnReportPrint.frame.size.height) inView:self.view animated:YES completionHandler:completionHandler];

}

这篇关于IOS 从 WebView 和 Page 打印 PDF 略有偏移的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆