Получите PDF/PNG, как произведено от UIWebView или UIView

Есть ли любой способ получить содержание a UIWebView и преобразуйте его в файл PNG или PDF? Я хотел бы получить подобный вывод к этому доступному на Mac путем нажатия кнопки PDF при печати от Safari, например. Я предполагаю, что это еще не возможный/создает в, но надо надеяться я буду удивлен и найду способ получить содержание от webview до файла.

Спасибо!

16
задан mjdth 16 March 2010 в 12:38
поделиться

3 ответа

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

#import <QuartzCore/QuartzCore.h>

@implementation UIView(PDFWritingAdditions)

- (void)renderInPDFFile:(NSString*)path
{
    CGRect mediaBox = self.bounds;
    CGContextRef ctx = CGPDFContextCreateWithURL((CFURLRef)[NSURL fileURLWithPath:path], &mediaBox, NULL);

    CGPDFContextBeginPage(ctx, NULL);
    CGContextScaleCTM(ctx, 1, -1);
    CGContextTranslateCTM(ctx, 0, -mediaBox.size.height);
    [self.layer renderInContext:ctx];
    CGPDFContextEndPage(ctx);
    CFRelease(ctx);
}

@end

Плохие новости: UIWebView не создает красивых форм и текста в PDF, но отображает себя как изображение в PDF.

21
ответ дан 30 November 2019 в 21:28
поделиться

Создать изображение из веб-просмотра просто:

UIImage* image = nil;

UIGraphicsBeginImageContext(offscreenWebView_.frame.size);
{
    [offscreenWebView_.layer renderInContext: UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();
}
UIGraphicsEndImageContext();

Получив изображение, вы можете сохранить его как PNG.

Создание PDF-файлов также возможно очень похожим способом, но только в еще не выпущенной версии iPhone OS.

5
ответ дан 30 November 2019 в 21:28
поделиться

@mjdth, попробуйте вместо этого fileURLWithPath: isDirectory: . URLWithString у меня тоже не работал.

@implementation UIView(PDFWritingAdditions)

- (void)renderInPDFFile:(NSString*)path
{
    CGRect mediaBox = self.bounds;
    CGContextRef ctx = CGPDFContextCreateWithURL((CFURLRef)[NSURL fileURLWithPath:path isDirectory:NO], &mediaBox, NULL);

    CGPDFContextBeginPage(ctx, NULL);
    CGContextScaleCTM(ctx, 1, -1);
    CGContextTranslateCTM(ctx, 0, -mediaBox.size.height);
    [self.layer renderInContext:ctx];
    CGPDFContextEndPage(ctx);
    CFRelease(ctx);
}

@end
0
ответ дан 30 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: