Рендеринг UIWebView в виде изображения / PDF имеет визуальные артефакты

#iphone #ios #uiwebview #pdf-generation

#iPhone #iOS #UIWebView #pdf-генерация

Вопрос:

Я рендеринг слоя UIWebView в графический контекст, а затем использую семейство функций UIGraphicsBeginPDFPageWithInfo(), чтобы включить его в PDF.

Моя проблема в том, что вывод включает дополнительный набор серых линий, которые не являются частью моего набора данных. Я надеюсь, что кто-нибудь сможет пролить свет на то, откуда они берутся.

Пример вывода приведен ниже. Отображаемый HTML-документ не содержит ничего, кроме текста «ЭТО ТЕСТ» — поля, которые вы видите, поступают откуда-то из процесса рендеринга. При отображении на экране это просто черный текст на белом экране — без строк / полей.

У кого-нибудь есть идеи, что происходит? Спасибо!

Вот код, который я использую для отображения этого веб-представления в формате PDF:

 NSMutableData *pdfData = [NSMutableData data];

UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil);
CGRect viewBounds = webView.bounds;

UIGraphicsBeginPDFPageWithInfo(viewBounds, nil);

CGContextRef pdfContext = UIGraphicsGetCurrentContext();
[webView.layer renderInContext:pdfContext];

UIGraphicsEndPDFContext();
  

Кроме того, вот скриншот того, что я вижу для вывода:

введите описание изображения здесь

Комментарии:

1. Можете ли вы поделиться файлом набора данных (образец pdf)?

Ответ №1:

Я столкнулся с той же проблемой. Это происходит всякий раз, когда вы пытаетесь отобразить UIWebView в контексте PDF, а ширина кадра> 512. Я не смог точно диагностировать проблему, но обошел ее, переведя UIWebView в UIImage, а затем переведя UIImage в контекст pdf.

Код как:

UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, ширина, высота), ноль);

CGContextRef CurrentContext = UIGraphicsGetCurrentContext();

 UIImage* image = nil;
UIGraphicsPushContext(currentContext);
UIGraphicsBeginImageContext(self.webview.frame.size);
{
    [self.webview.layer renderInContext: UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();
}
UIGraphicsEndImageContext();
UIGraphicsPopContext();

[image drawInRect:CGRectMake(0, 0, kWidth, kHeight)];