Ios 从核心数据和表视图控制器创建PDF文档

Ios 从核心数据和表视图控制器创建PDF文档,ios,objective-c,uitableview,pdf,core-data,Ios,Objective C,Uitableview,Pdf,Core Data,我正在开发我的第一个应用程序,几乎完成了;我只是停留在一个创建PDF功能上。我有一个简单的核心数据数据库和一个表视图控制器(使用FetchedResultsController)以及一个NavigationBar按钮项,当我按下它时,我理想地希望在Documents目录中创建一个PDF,然后将其附加到电子邮件。我正处于创建PDF的阶段 按照苹果的指导方针()但更多本教程内容在这里(),我在iPhone模拟器的文档目录中创建了一个可工作的PDF 当然,上面教程中的代码中有很多方法在iOS 7中被贬

我正在开发我的第一个应用程序,几乎完成了;我只是停留在一个创建PDF功能上。我有一个简单的核心数据数据库和一个表视图控制器(使用FetchedResultsController)以及一个NavigationBar按钮项,当我按下它时,我理想地希望在Documents目录中创建一个PDF,然后将其附加到电子邮件。我正处于创建PDF的阶段

按照苹果的指导方针()但更多本教程内容在这里(),我在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 get是用边框创建的,在标题行下,它的文本是“您好,这是一个测试PDF”,没有引号

这很好,但问题是从核心数据中提取信息。此表视图正在调用名为Transaction的核心数据实体,该实体与其他核心数据实体有关系

表格视图控制器(使用自定义单元格)具有标签和附件视图(图像),我需要将其传递到PDF。表视图工作得非常好;PDF工作得很好。问题是,我如何传递核心数据信息

所以我想将“自定义单元格中的标签”传递到PDF中,这是从核心数据获取信息的全部内容

当然,这不仅仅是一个条目。此表格视图可以包含1到30个单元格,每个单元格有3个标签和一个附件视图。我需要把这些标签输入核心数据

我尝试过使用这些代码,但我不确定如何格式化上面的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中的输出当然是:“(实体:事务;id:0x8baac90;数据:{\n这对于用户来说是不可读的

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

1) PDF具有与调用此提取为PDF的表视图类似的表视图布局,因此具有单元格、标签和辅助视图(首选结果),或 2) 一种添加代码的方法,这样我就可以用单元格绘制一个表格,并在PDF中显示单元格和附件视图


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

使用
NSFetchRequest
从核心数据中获取以下数据:


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

使用
NSFetchRequest
从核心数据中获取如下数据:


然后你可以迭代
类型
并为你的pdf创建字符串。

你想要的最终结果是什么,例如,你是否试图在你的pdf文档中捕获表视图?感谢你的回答-最好是-让pdf显示带有信息的表视图在这里是最好的,但我不知道这是否可行e、 因此,我可能只需要使用格式来分隔信息,但是,是的,在这里显示表视图自定义单元格将是最好的方法,如果可能的话,对用户来说也是最合适的。我刚刚更新了我的原始问题,以包括当前的结果。您想要的最终结果是什么,例如,您是否正在尝试capt您的PDF文档中是否有表格视图?感谢您的回复-理想情况下是的-让PDF显示包含信息的表格视图在这里是最好的,但我不知道这是否可能,因此我可能只需要使用格式来分隔信息,但是是的,显示表格视图自定义单元格将是最好的应用程序roach在这里,如果可能的话,最适合用户我刚刚更新了我的原始问题,将当前的OutComeHanks包含在Hashmat中,这很有意义-在这个类中,我已经有了一个FetchedRequest,它是为表视图提取信息的东西-在同一个cla中有另一个fetchRequest可以吗ss,当然,做一些不同的事情,或者我可以只使用现有的fetchRequest吗?另外,代码在字符串的类型中进行迭代时会是什么样子?当然,您可以使用不同的参数设置不同的fetchRequest。我建议根据您的需要设置参数。如果您认为这有助于解决问题,请接受答案问题。谢谢-我们就到了-我正在用NSString*textToDraw=[NSString stringWithFormat:@“Information=%@”,types]遍历“类型”;并且正在获取“(实体:事务;id:0x8baac90;数据:{\n作为PDF中的输出,这是可以理解的,因为这是原始的核心数据信息,但对用户来说当然没有意义。我希望实际信息来自自定义单元格。因此,如果可能,自定义单元格中的标签在类似表的视图中-是否可能?对于当前可见的单元格可能是这样。如果这就是你希望构建的字符串lke你在单元格中显示信息,但在pdf中只显示一个字符串。不要只打印nsmanagedobject。这样你会得到指针地址。请阅读核心数据文档非常感谢Hashmat,这是有意义的-在这个类中,我已经有了一个FetchedRequest,这就是我要做的n表视图的信息-在同一个类中有另一个fetchRequest可以吗?当然,做一些不同的事情,或者我可以使用现有的fetchRequest吗?另外,代码在字符串的类型中进行迭代时是什么样子的?当然,可以使用不同的参数有不同的fetchRequest。
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];