BNHtmlPdfKit 可以轻松地将从 HTML 字符串或 URL 中获取的 HTML 数据转换为 iOS 上的 PDF 文件。请随意分叉此项目并帮助改进它!
如果您在您的应用中使用了 BNHtmlPdfKit,我会很乐意听到您的反馈!
只需将 BNHtmlPdfKit.h 和 BNHtmlPdfKit.m 复制到您的项目中。
这一切源于我在 2011 年 6 月发表的一篇帖子,当时我试图将 Html 数据保存为 PDF 并将 PDF 数据作为附件复制到电子邮件中。我一直想改进代码,最终做到了。这篇帖子至今仍为我的博客带来大量流量,比第二热门页面的流量高出 10 倍,并且仍然是一个人们正在努力解决的问题。
务必在调用方法的作用域之外保留对 BNHtmlPdfKit 对象的引用。否则,不会调用任何代理方法
@interface MyCoolViewController () {
BNHtmlPdfKit *_htmlPdfKit;
}
- (void) createPdf:(id)sender {
_htmlPdfKit = [[BNHtmlPdfKit alloc] init];
_htmlPdfKit.delegate = self;
[_htmlPdfKit saveUrlAsPdf:[NSURL URLWithString:@"http://itsbrent.net/index.html"]];
}
@end
// Delegate methods go here...
- (id)init;
- (id)initWithPageSize:(BNPageSize)pageSize;
- (id)initWithCustomPageSize:(CGSize)pageSize;默认初始化器具有基于地区设置默认页面大小(感谢 Pierre Bernard)和 1/4 英寸边距。
BNHtmlPdfKit *htmlPdfKit = [[BNHtmlPdfKit alloc] init];
htmlPdfKit.delegate = self;
[htmlPdfKit saveUrlAsPdf:[NSURL URLWithString:@"http://itsbrent.net"] toFile:@"...itsbrent.pdf"];仅保存 PDF 数据。
[htmlPdfKit saveUrlAsPdf:[NSURL URLWithString:@"http://itsbrent.net"]];BNHtmlPdfKit *htmlPdfKit = [[BNHtmlPdfKit alloc] init];
htmlPdfKit.delegate = self;
[htmlPdfKit saveHtmlAsPdf:@"<html>..." toFile:@"...itsbrent.pdf"];仅保存 PDF 数据。
[htmlPdfKit saveHtmlAsPdf:@"<html>..."];- (void)htmlPdfKit:(BNHtmlPdfKit *)htmlPdfKit didSavePdfData:(NSData *)data;
- (void)htmlPdfKit:(BNHtmlPdfKit *)htmlPdfKit didSavePdfFile:(NSString *)file;
- (void)htmlPdfKit:(BNHtmlPdfKit *)htmlPdfKit didFailWithError:(NSError *)error;每当为 Html 字符串或 URL 生成 PDF 数据时,都会调用 didSavePdfData。每当使用 toFile 方法保存 PDF 文件时,都会调用 didSavePdfFile。
BNHtmlPdfKit 支持许多最受欢迎的 纸张大小。
BNPageSizeLetterBNPageSizeGovernmentLetterBNPageSizeLegalBNPageSizeJuniorLegalBNPageSizeLedgerBNPageSizeTabloidBNPageSizeA0BNPageSizeA1BNPageSizeA2BNPageSizeA3BNPageSizeA4BNPageSizeA5BNPageSizeA6BNPageSizeA7BNPageSizeA8BNPageSizeA9BNPageSizeA10BNPageSizeB0BNPageSizeB1BNPageSizeB2BNPageSizeB3BNPageSizeB4BNPageSizeB5BNPageSizeB6BNPageSizeB7BNPageSizeB8BNPageSizeB9BNPageSizeB10BNPageSizeC0BNPageSizeC1BNPageSizeC2BNPageSizeC3BNPageSizeC4BNPageSizeC5BNPageSizeC6BNPageSizeC7BNPageSizeC8BNPageSizeC9BNPageSizeC10BNPageSizeJapaneseB0BNPageSizeJapaneseB1BNPageSizeJapaneseB2BNPageSizeJapaneseB3BNPageSizeJapaneseB4BNPageSizeJapaneseB5BNPageSizeJapaneseB6BNPageSizeJapaneseB7BNPageSizeJapaneseB8BNPageSizeJapaneseB9BNPageSizeJapaneseB10BNPageSizeJapaneseB11BNPageSizeJapaneseB12BNHtmlPdfKit 也支持通过使用 customPageSize 属性来自定义页面大小。请以英寸 * 72.0f 的格式指定您的页面大小。
htmlPdfKit.customPageSize = CGSizeMake(8.5f * 72.0f, 11.0f * 72.0f);可以通过使用 landscape 属性或下面的自定义初始化方法来设置纸张大小及横向模式的支持。
- (id)initWithPageSize:(BNPageSize)pageSize isLandscape:(BOOL)landscape;默认页边距大小设置为 1/4"。
htmlPdfKit.topAndBottomMarginSize = 0.25f * 72.0f;
htmlPdfKit.leftAndRightMarginSize = 0.25f * 72.0f;