Загрузите UIWebView из 2-го VC и распечатайте его в PDF

#ios #objective-c #pdf #uiwebview #uigraphicscontext

#iOS #objective-c #PDF #uiwebview #uigraphicscontext

Вопрос:

Я пытаюсь создать PDF-файл с большим количеством данных. PDF содержит 7 страниц, текст, изображения и диаграммы и пока работает нормально. Теперь мне нужно добавить html-таблицу на одну из страниц PDF-файлов. В этом ViewController я добавил WebView и попробуйте загрузить данные в фоновом режиме, а затем распечатать их в файл. При представлении ViewController WebView загружает страницу. Но мне нужно, чтобы он загружался, когда он не представлен, моя текущая проблема заключается в том, что UIWebView остается белым в PDF-файле: webViewDidStartLoad:(UIWebView *)webView не вызывается.

Код VC1:

 PDFPage6ViewController *pdf2 = [self.storyboard instantiateViewControllerWithIdentifier:@"PDF6"];
pdf2.controlIdentifier = controlIdentifier;
pdf2.startDate = startDate;
pdf2.endDate = endDate;

UIGraphicsBeginPDFContextToData(pdfData, CGRectZero,nil);
CGContextRef pdfContext=UIGraphicsGetCurrentContext();
UIGraphicsBeginPDFPage();
[pdf2.view.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();
  

Код PDF2:

 - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self getDataFromDatabase];
}


- (void)getDataFromDatabase {
    /*loading data*/
    [self processData];
}

- (void)processData {
    /*doing some calculations*/
    NSString *html = /*creating the html string*/
    [webView loadHTMLString:html baseURL:nil];
}
  

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

1. Установили ли вы для делегата UIWebView значение self?

2. Да, делегат установлен на 2-й VC

3. Как насчет ProcessData? Вызывается ли он?

4. Вы должны создать PDF в webViewDidFinishLoad:.

5. Да, это так. Если я представлю PDF VC, WebView правильно загрузит html-таблицу, затем будут вызваны ProcessData и webViewDidStartLoad: (UIWebView *)WebView. Если я не представляю VC, ProcessData тоже вызывается. Не будет загружаться только WebView