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 支持许多最受欢迎的 纸张大小。
BNPageSizeLetter
BNPageSizeGovernmentLetter
BNPageSizeLegal
BNPageSizeJuniorLegal
BNPageSizeLedger
BNPageSizeTabloid
BNPageSizeA0
BNPageSizeA1
BNPageSizeA2
BNPageSizeA3
BNPageSizeA4
BNPageSizeA5
BNPageSizeA6
BNPageSizeA7
BNPageSizeA8
BNPageSizeA9
BNPageSizeA10
BNPageSizeB0
BNPageSizeB1
BNPageSizeB2
BNPageSizeB3
BNPageSizeB4
BNPageSizeB5
BNPageSizeB6
BNPageSizeB7
BNPageSizeB8
BNPageSizeB9
BNPageSizeB10
BNPageSizeC0
BNPageSizeC1
BNPageSizeC2
BNPageSizeC3
BNPageSizeC4
BNPageSizeC5
BNPageSizeC6
BNPageSizeC7
BNPageSizeC8
BNPageSizeC9
BNPageSizeC10
BNPageSizeJapaneseB0
BNPageSizeJapaneseB1
BNPageSizeJapaneseB2
BNPageSizeJapaneseB3
BNPageSizeJapaneseB4
BNPageSizeJapaneseB5
BNPageSizeJapaneseB6
BNPageSizeJapaneseB7
BNPageSizeJapaneseB8
BNPageSizeJapaneseB9
BNPageSizeJapaneseB10
BNPageSizeJapaneseB11
BNPageSizeJapaneseB12
BNHtmlPdfKit 也支持通过使用 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;