在iOS上创建动态pdf文档

时间:2015-03-01 06:58:41

标签: ios objective-c swift pdf pdf-generation

如何在iOS上创建动态pdf文档? 我可以使用objective-c / swift完成,但应该支持每个文档的动态内容和不同页数。 每个PDF文档的创建都应该“动态”完成,而无需使用模板。

1 个答案:

答案 0 :(得分:4)

要在PDF中绘制一些文本,我们需要使用Core Text框架。为此,请选择项目目标并转到“构建阶段”选项卡。单击Link Binaries With Libraries选项下面的+号,然后选择CoreText框架。

然后打开ViewController.h并导入CoreText标题:

#import <CoreText/CoreText.h>

向ViewController.m添加一个新方法以创建“hello world”PDF。

-(void)drawText
{
NSString* fileName = @"Invoice.PDF";

NSArray *arrayPaths =
NSSearchPathForDirectoriesInDomains(
                                    NSDocumentDirectory,
                                    NSUserDomainMask,
                                    YES);
NSString *path = [arrayPaths objectAtIndex:0];
NSString* pdfFileName = [path stringByAppendingPathComponent:fileName];

NSString* textToDraw = @"Hello World";
CFStringRef stringRef = (__bridge CFStringRef)textToDraw;

// Prepare the text using a Core Text Framesetter.
CFAttributedStringRef currentText = CFAttributedStringCreate(NULL, stringRef, NULL);
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(currentText);

CGRect frameRect = CGRectMake(0, 0, 300, 50);
CGMutablePathRef framePath = CGPathCreateMutable();
CGPathAddRect(framePath, NULL, frameRect);

// Get the frame that will do the rendering.
CFRange currentRange = CFRangeMake(0, 0);
CTFrameRef frameRef = CTFramesetterCreateFrame(framesetter, currentRange, framePath, NULL);
CGPathRelease(framePath);

// Create the PDF context using the default page size of 612 x 792.
UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);

// Mark the beginning of a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);

// Get the graphics context.
CGContextRef currentContext = UIGraphicsGetCurrentContext();

// Put the text matrix into a known state. This ensures
// that no old scaling factors are left in place.
CGContextSetTextMatrix(currentContext, CGAffineTransformIdentity);

// Core Text draws from the bottom-left corner up, so flip
// the current transform prior to drawing.
CGContextTranslateCTM(currentContext, 0, 100);
CGContextScaleCTM(currentContext, 1.0, -1.0);

// Draw the frame.
CTFrameDraw(frameRef, currentContext);

CFRelease(frameRef);
CFRelease(stringRef);
CFRelease(framesetter);

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

}

<强>参考

1. How to create a pdf with quartz-2d in ios part-1

2. How to create a pdf with quartz 2d in ios part-2

有关CoreText框架的更多信息

1. Core text tutorial for ios making a magazine app

2. About Core Text - Apple Doc