-(void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename
{
// Creates a mutable data object for updating with binary data, like a byte array
UIWebView *webView = (UIWebView*)aView;
NSString *heightStr = [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];
int height = [heightStr intValue];
// Get the number of pages needed to print. 9 * 72 = 648
int pages = ceil(height / 648.0);
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData( pdfData, CGRectZero, nil );
CGRect frame = [webView frame];
for (int i = 0; i < pages; i++) {
// Check to see if page draws more than the height of the UIWebView
if ((i+1) * 648 > height) {
CGRect f = [webView frame];
f.size.height -= (((i+1) * 648.0) - height);
[webView setFrame: f];
}
UIGraphicsBeginPDFPage();
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(currentContext, 72, 72); // Translate for 1" margins
[[[webView subviews] lastObject] setContentOffset:CGPointMake(0, 648 * i) animated:NO];
[webView.layer renderInContext:currentContext];
}
UIGraphicsEndPDFContext();
// Retrieves the document directories from the iOS device
NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];
// instructs the mutable data object to write its context to a file on disk
[pdfData writeToFile:documentDirectoryFilename atomically:YES];
[webView setFrame:frame];
NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
}
我正在使用上面的代码从webview生成一个pdf文件。它工作正常,但是,内容没有正确裁剪:页面底部的内容变得一团糟。我想我可以用Core Graphics的方法做得更好,但我找不到如何做到这一点。有什么想法吗?
6条答案
按热度按时间ggazkfy81#
从
UIWebView
使用UIPrintPageRenderer
按照以下步骤操作:添加
UIPrintPageRenderer
中的Category
获取PDF数据添加A4尺寸的定义
现在在
UIWebView's
webViewDidFinishLoad
delegate
中使用UIWebView
的UIPrintPageRenderer
property
。nx7onnlm2#
谢谢你的回答Firemarble,它帮了我很多.我设法得到一个有点好看的结果与此方法:
jaql4c8m3#
Swift 2.0解决方案,如何将pdf从webview保存到NSData:
您还需要将UIWebViewDelegate添加到您的ViewController和UIPrintPageRenderer的扩展。
gr8qqesn4#
UIWebView现在已弃用。请使用WKWebView扩展从WKWebView创建PDF
信用:http://www.swiftdevcenter.com/create-pdf-from-uiview-wkwebview-and-uitableview/
Swift 4.2
它会将PDF文件保存在目录中并返回PDF文件路径。
q5iwbnjs5#
@Dan Loewenherz的Swift 3解决方案回答:
eiee3dmh6#
看起来问题可能来自硬编码的高度648,如果将648的所有示例都改为调用windowsscreenHeight会发生什么?
//获取窗口的宽度和高度。