3

我正在将一个 NSData 的 pdf 文件加载到 webview 中,如下所示:

[webView loadData:pdf MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];

它在 UIWebView 中显示精美,并正确显示了 pdf 的页数。

但是,当我尝试打印时,我得到一整页,然后是一个剩余的页面,其中可能是单个 pdf 页面的最后十分之一左右。换句话说,我没有一对一的对应关系。它似乎没有缩小内容。

如何缩放打印输出?我使用这个片段打印:

UIPrintInteractionController *pic = 
     [UIPrintInteractionController sharedPrintController];

UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = printName;
printInfo.duplex = UIPrintInfoDuplexNone;

pic.printInfo = printInfo;

pic.printFormatter = [webView viewPrintFormatter];

pic.showsPageRange = YES;

这个问题描述了一种涉及缩放输入的方法,但我希望存在更简单的方法。

问候, 戴恩

4

1 回答 1

6

所以我也有这个问题。我正在使用 UIWebView 访问在窗口中打开 PDF 文档的网站链接。打印 PDF 时,文档在底部被裁剪并发送到下一页。这很烦人,因为现在一个两页的 PDF 文档正在打印为一个三页的 PDF 文档,第三页上基本上没有任何内容。我的解决方法很简单,我做了两件事。我还没有测试这两个东西是否都是解决这个问题所必需的,但是我会发布任何东西。

在我的 ViewController.m 中的这个方法中:

- (void) webViewDidStartLoad:(UIWebView *)webView
{
    webView.scalesPageToFit = YES;
}

然后在我的打印方法中(我有一个打印方法,因为我有多个带有 web 视图和打印按钮的场景。

-(void) printWebView:(UIWebView *)webView {
 UIPrintInfo *pi = [UIPrintInfo printInfo];
    pi.outputType = UIPrintInfoOutputGeneral;
    pi.jobName = webView.request.URL.absoluteString;
    pi.orientation = UIPrintInfoOrientationPortrait;
    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
    pic.printInfo = pi;
    pic.showsPageRange= NO;
    UIPrintPageRenderer *renderer = [[UIPrintPageRenderer alloc] init];
    webView.viewPrintFormatter.printPageRenderer.headerHeight = 30.0f;
    webView.viewPrintFormatter.printPageRenderer.footerHeight = 30.0f;
    webView.viewPrintFormatter.contentInsets = UIEdgeInsetsMake(0.0f, 30.0f, 0.0f, 30.0f);
    webView.viewPrintFormatter.startPage = 0;
    [renderer addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:0];
    pic.printPageRenderer = renderer;
    [pic presentAnimated:YES completionHandler:^(UIPrintInteractionController *pic2, BOOL completed, NSError *error) {
        // indicate done or error
    }];
}

现在我不知道您的应用程序是否需要所有这些,但我添加的帮助我解决缩放问题的行是

    webView.scalesPageToFit = YES;

和 pic.showsPageRange=NO;

这可能看起来有点奇怪,但从我读过的内容来看,

    pic.showsPageRange= NO;

是这里的关键。如果将其设置为是,XCode AirPrint 会缩放页面,并且你的页边距会像我在我的 web 视图中加载我的 PDF 一样搞砸。我实际上是在 StackOverflow 上读到的,并且想感谢帖子答案的作者,但我很难找到他的帖子。这似乎有点权衡,因为打印对话框将不再显示正在打印的文档的页面范围,但是对于短文档,我个人认为它值得权衡实现缩放文档打印与冗长的解决方法。

无论如何,我希望这对你有用,如果你发现更好的东西,请告诉我们。

PS 我知道我的格式化/渲染代码都搞砸了,我试图弄清楚如何在 XCode 中操作打印选项并且还没有删除不必要的行。

于 2013-09-23T21:23:05.233 回答