Печать PDF из UIWebView дает немасштабированные страницы

Я загружаю файл PDF, который является NSData в веб-просмотр как таковой:

[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;

Этот вопрос описывает метод, который включает масштабирование входных данных, но я надеюсь, что существует нечто более простое.

С уважением, датчанин

1 ответ

Так что у меня тоже была эта проблема. Я использовал UIWebView для доступа к ссылке на сайт, который открыл PDF-документ в окне. Когда PDF печатался, документ обрезался внизу и отправлялся на следующую страницу. Это было досадно, потому что теперь двухстраничный PDF-документ печатался как трехстраничный PDF-документ, на третьей странице практически ничего не было. Мое решение было простым, я сделал две вещи. Я не проверял, необходимы ли обе эти вещи для решения этой проблемы, однако я опубликую обе.

В этом методе в моем ViewController.m:

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

а затем в моем методе печати (у меня есть метод для печати, так как у меня есть несколько сцен с веб-просмотрами и кнопками печати.

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

здесь ключ Если бы для этого параметра было установлено значение yes, XCode AirPrint масштабировал бы всю страницу винт, и ваши поля были бы испорчены, как у меня с моим PDF, загруженным внутри моего веб-просмотра. Я действительно прочитал это на Stackru и хотел бы отметить автора ответа на пост, но у меня возникли некоторые трудности с поиском его поста. Это кажется чем-то вроде компромисса, поскольку в диалоговом окне печати больше не будет отображаться диапазон страниц для печатаемого документа, однако для коротких документов я лично считаю, что стоит компромисса за простоту реализации масштабированной печати документа по сравнению с длительный обходной путь.

В любом случае, я надеюсь, что это сработает для вас, и если вы найдете что-то лучшее, дайте нам знать.

PS Я знаю, что мой код для форматирования / рендеринга все испортил, я пытался выяснить, как я мог манипулировать параметрами печати в XCode и еще не удалил ненужные строки.

Другие вопросы по тегам