gpt4 book ai didi

ios - 从核心数据和 TableView Controller 创建 PDF 文档

转载 作者:行者123 更新时间:2023-11-29 12:59:02 26 4
gpt4 key购买 nike

我正在开发我的第一个应用程序,快完成了;我只是停留在创建 PDF 功能上。我有一个简单的核心数据数据库和一个带有 NavigationBar 按钮项的 TableView Controller (使用 FetchedResultsController),当我按下它时,我理想地希望在文档目录中创建一个 PDF,然后附加到电子邮件中。我正处于创建 PDF 的阶段。

按照 Apple 指南 ( https://developer.apple.com/library/ios/documentation/2ddrawing/conceptual/drawingprintingios/GeneratingPDF/GeneratingPDF.html ) 但本教程的更多内容 ( http://www.ioslearner.com/generate-pdf-programmatically-iphoneipad/ ),我在 iPhone 模拟器的文档目录中创建了一个工作 PDF。

当然,上面教程中的代码有很多方法在iOS 7中已经被弃用,所以我将“body text”方法更新为:

- (void) drawText
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(currentContext, 0.0, 0.0, 0.0, 1.0);

NSString *textToDraw = @"Hello, this is a test PDF";

UIFont *font = [UIFont systemFontOfSize:14.0];

CGSize textSize = CGSizeMake(pageSize.width - 5*kBorderInset-5*kMarginInset, pageSize.height - 5*kBorderInset - 5*kMarginInset);

CGRect renderingRect = CGRectMake(kBorderInset + kMarginInset, kBorderInset + kMarginInset + 50.0, pageSize.width - 2*kBorderInset - 2*kMarginInset, textSize.height);

[textToDraw drawWithRect:renderingRect options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];
}

效果很好。创建的 PDF 带有边框,在标题行下方,文字为“您好,这是一个测试 PDF”,但没有引号。

一切都很好,但问题是从 Core Data 中提取信息。此 TableView 正在调用我的核心数据实体,称为 Transaction,它与其他核心数据实体有关系。

TableView Controller (使用自定义单元格)具有标签和附件 View (图像),我需要将其传递给 PDF。表格 View 工作得很好; PDF 工作得很好。问题是,如何传递核心数据信息?

所以我想将“来自自定义单元格的标签”传递到 PDF 中,PDF 都是从 Core Data 获取信息的。

当然,这不仅仅是一个条目。这个 TableView 可以有 1 到 30 个单元格,每个单元格有 3 个标签和一个附属 View 。我需要将这些标签放入核心数据中。

我试过使用代码,但我不确定如何格式化上面的 NSString 命令以使其正常工作。

我的 saveToPDF 按钮是:

- (IBAction)saveToPDF:(id)sender
{
pageSize = CGSizeMake(612, 792);
NSString *fileName = @"new.pdf";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];

[self generatePdfWithFilePath:pdfFileName];

}

调用:

- (void) generatePdfWithFilePath: (NSString *)thefilePath
{
UIGraphicsBeginPDFContextToFile(thefilePath, CGRectZero, nil);

//NSInteger currentPage = 0;
BOOL done = NO;
do
{
//Start a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil);

//Draw a page number at the bottom of each page.
//currentPage++;
//[self drawPageNumber:currentPage];

//Draw a border for each page.
[self drawBorder];

//Draw text fo our header.
[self drawHeader];

//Draw a line below the header.
[self drawLine];

//Draw some text for the page.
[self drawText];

//Draw an image
[self drawImage];
done = YES;
}
while (!done);

// Close the PDF context and write the contents out.
UIGraphicsEndPDFContext();
}

编辑:

我在 drawText 方法中创建了一个 fetchRequest,然后输出它的信息。

NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

NSFetchRequest *pdfFetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:managedObjectContext];
pdfFetchRequest.entity = entity;
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"dates.dateOfEvent" ascending:NO];
pdfFetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];
pdfFetchRequest.fetchBatchSize = 20;
NSError *error = nil;
NSArray *types = [managedObjectContext executeFetchRequest:pdfFetchRequest error:&error];
NSString *textToDraw = [NSString stringWithFormat:@"Information = %@", types];

PDF 中的输出当然是:"(entity: Transaction; id: 0x8baac90 ; data: {\n 用户不可读。

我有一个带有 3 个标签和一个附件 View 的自定义单元格。我想要以下任何一项:

1) PDF 具有与调用此提取到 PDF 的 TableView 类似的 TableView 布局,因此具有单元格、标签和附件 View (首选结果),或者2) 一种添加代码的方法,这样我就可以绘制一个带有单元格的表格,并在 PDF 中包含单元格和附件 View 。

非常欢迎任何关于将核心数据信息放入此 PDF 的见解或想法!

最佳答案

使用NSFetchRequest 从这样的核心数据中获取数据from apple example :

NSManagedObjectContext *context = [recipe managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"RecipeType" inManagedObjectContext:context]];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];
[fetchRequest setSortDescriptors:sortDescriptors];

NSError *error = nil;
NSArray *types = [context executeFetchRequest:fetchRequest error:&error];

然后您可以迭代 types 并为您的 pdf 创建字符串。

关于ios - 从核心数据和 TableView Controller 创建 PDF 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20242523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com