gpt4 book ai didi

ios - 从 UITableView 生成 PDF,ios 中的 Plist

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:58 24 4
gpt4 key购买 nike

当数据存储在 PList , UITableView 时,如何生成 PDF?

我真的是 ios 的新手,而且它也生成 pdf

提前致谢。

最佳答案

编辑:

假设您的 plist 结构如下: your plist suppose named recipes

================首先,您应该添加框架 coreText 和 quartz core。他们像这样导入和定义一些宏:

#import <QuartzCore/QuartzCore.h>
#import <CoreText/CoreText.h>

#define LEFT_MARGIN 25
#define RIGHT_MARGIN 25
#define TOP_MARGIN 35
#define BOTTOM_MARGIN 50
#define BOTTOM_FOOTER_MARGIN 32
#define DOC_WIDTH 1004
#define DOC_HEIGHT 768

可以这样获取plist数据:

NSString *path = [[NSBundle mainBundle] pathForResource:@"recipes" ofType:@"plist"];    

// Load the file content and read the data into arrays
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];

//编辑

tableData = [dict objectForKey:@"RecipeName"];//tabledata is global array
self.textToDraw = [tableData objectAtIndex:0];

//编辑

然而,通过下面的代码,您可以创建动态 pdf:

 -(void) btnDrawPdf
{

// pageSize = CGSizeMake(612, 792);

NSString *fileName = @"DemoNetwrk.pdf";
NSString *fontName = @"Helvetica";

//NSString *textToDraw = @"你的数据来自plist";现在评论这个

//[self generatePdfWithFilePath:pdfFileName];
[self createPDF:fileName **withContent:self.textToDraw** forSize:14 forFontName:fontName andColor:[UIColor blackColor]];
}

//多页pdf和pdf会保存在doc目录library>Application Support>iPhoneSimulator>library>Documents(ios 4.3完美)

- (void) createPDF:(NSString *)fileName withContent:(NSString *)content forSize:(int)fontSize forFontName:(NSString *)fontName andColor:(UIColor *)color
{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *newFilePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:fileName];

CGRect a4Page = CGRectMake(0, 0, DOC_WIDTH, DOC_HEIGHT);

NSDictionary *fileMetaData = [[NSDictionary alloc] init];

if (!UIGraphicsBeginPDFContextToFile(newFilePath, a4Page, fileMetaData )) {
NSLog(@"error creating PDF context");
return;
}

BOOL done = NO;
CGContextRef context = UIGraphicsGetCurrentContext();

CFRange currentRange = CFRangeMake(0, 0);

CGContextSetTextDrawingMode (context, kCGTextFill);
CGContextSelectFont (context, [fontName cStringUsingEncoding:NSUTF8StringEncoding], fontSize, kCGEncodingMacRoman);
CGContextSetFillColorWithColor(context, [color CGColor]);
// Initialize an attributed string.
CFMutableAttributedStringRef attrString = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attrString, currentRange, (CFStringRef)content);

// Create the framesetter with the attributed string.
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString);

do {
UIGraphicsBeginPDFPage();



CGMutablePathRef path = CGPathCreateMutable();

CGRect bounds = CGRectMake(LEFT_MARGIN,
TOP_MARGIN,
DOC_WIDTH - RIGHT_MARGIN - LEFT_MARGIN,
DOC_HEIGHT - TOP_MARGIN - BOTTOM_MARGIN);

CGPathAddRect(path, NULL, bounds);



// Create the frame and draw it into the graphics context
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, currentRange, path, NULL);

if(frame) {
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0, bounds.origin.y);
CGContextScaleCTM(context, 1, -1);
CGContextTranslateCTM(context, 0, -(bounds.origin.y + bounds.size.height));
CTFrameDraw(frame, context);
CGContextRestoreGState(context);

// Update the current range based on what was drawn.
currentRange = CTFrameGetVisibleStringRange(frame);
currentRange.location += currentRange.length;
currentRange.length = 0;

CFRelease(frame);
}

// If we're at the end of the text, exit the loop.
if (currentRange.location == CFAttributedStringGetLength((CFAttributedStringRef)attrString))
done = YES;
}
while(!done);

UIGraphicsEndPDFContext();

// [fileMetaData release];
CFRelease(attrString);
CFRelease(framesetter);

}

我终于明白了: enter image description here

它会帮助你...

关于ios - 从 UITableView 生成 PDF,ios 中的 Plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20541412/

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