【发布时间】:2012-05-22 16:23:19
【问题描述】:
如何从 html 创建 pdf 而无需在 iPhone 应用程序的目标 c 中截取 uiwebview 的屏幕截图或图像?
当我创建 pdf 以捕获 UIwebView 的屏幕截图时,pdf 分辨率看起来不太好。放大或缩小其文本的像素被破坏。
【问题讨论】:
标签: iphone objective-c
如何从 html 创建 pdf 而无需在 iPhone 应用程序的目标 c 中截取 uiwebview 的屏幕截图或图像?
当我创建 pdf 以捕获 UIwebView 的屏幕截图时,pdf 分辨率看起来不太好。放大或缩小其文本的像素被破坏。
【问题讨论】:
标签: iphone objective-c
UIWebView中加载html
从UIWebView 使用UIPrintPageRenderer 按照以下步骤操作:
Category of UIPrintPageRenderer 以获取PDF数据@interface UIPrintPageRenderer (PDF)
- (NSData*) printToPDF;
@end
@implementation UIPrintPageRenderer (PDF)
- (NSData*) printToPDF
{
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData( pdfData, self.paperRect, nil );
[self prepareForDrawingPages: NSMakeRange(0, self.numberOfPages)];
CGRect bounds = UIGraphicsGetPDFContextBounds();
for ( int i = 0 ; i < self.numberOfPages ; i++ )
{
UIGraphicsBeginPDFPage();
[self drawPageAtIndex: i inRect: bounds];
}
UIGraphicsEndPDFContext();
return pdfData;
}
@end
#define kPaperSizeA4 CGSizeMake(595.2,841.8)
UIWebView's webViewDidFinishLoad delegate 使用UIPrintPageRenderer property 的UIWebView。- (void)webViewDidFinishLoad:(UIWebView *)awebView
{
if (awebView.isLoading)
return;
UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init];
[render addPrintFormatter:awebView.viewPrintFormatter startingAtPageAtIndex:0];
//increase these values according to your requirement
float topPadding = 10.0f;
float bottomPadding = 10.0f;
float leftPadding = 10.0f;
float rightPadding = 10.0f;
CGRect printableRect = CGRectMake(leftPadding,
topPadding,
kPaperSizeA4.width-leftPadding-rightPadding,
kPaperSizeA4.height-topPadding-bottomPadding);
CGRect paperRect = CGRectMake(0, 0, kPaperSizeA4.width, kPaperSizeA4.height);
[render setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"];
[render setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"];
NSData *pdfData = [render printToPDF];
if (pdfData) {
[pdfData writeToFile:[NSString stringWithFormat:@"%@/tmp.pdf",NSTemporaryDirectory()] atomically: YES];
}
else
{
NSLog(@"PDF couldnot be created");
}
}
【讨论】:
CGSizeMake(595.2,841.8) ?我正在使用 iPad Pro 9.7 和 12.9,那么它们的尺寸是多少?任何想法 ?因为即使底部有很多空间,这种尺寸也会将 pdf 分成 2 页
您可以使用quartz core 在PDF 上下文中绘制UIwebview,而不是将其作为屏幕截图。 Here 是代码。
【讨论】:
Generate PDF from Html Page. 我希望这会对你有所帮助。
【讨论】:
Get a PDF/PNG as output from a UIWebView or UIView
这是一个很好的 SO 问题,具有相同的方法..
但是要以编程方式创建 pdf,您可以从这里开始 在 iPhone 上生成 PDF:
http://iphonesdksnippets.com/post/2009/02/13/Generate-PDF-on-iPhone.aspx
还有:
使用 Quartz2d 绘图:
【讨论】: