gpt4 book ai didi

objective-c - 在 Ipad 中直接从 UiTextView 创建多页 PDF

转载 作者:行者123 更新时间:2023-12-03 10:20:39 25 4
gpt4 key购买 nike

我已经创建了具有特定布局的 pdf。问题是当 TextView 的内容很长时,Pdf 不会自动生成新页面,我无法预定义在运行时将创建多少页面。谁能帮帮我?

最佳答案

您可以尝试使用此代码,这可能对您有所帮助在界面生成器中保留一个 TextView 和一个按钮,并使用按钮操作方法并生成 pdf导入这些框架

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



-(NSString*)getPDFFileName
{
NSString* fileName = @"sample.PDF";
NSArray *arrayPaths =
NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *path = [arrayPaths objectAtIndex:0];
NSString* pdfFileName = [path stringByAppendingPathComponent:fileName];
return pdfFileName;

}
-(IBAction)PdfGeneration:(id)sender{
// Prepare the text using a Core Text Framesetter.
CFAttributedStringRef currentText = CFAttributedStringCreate(NULL, (__bridge CFStringRef)txtObj.text, NULL);
if (currentText) {
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(currentText);
if (framesetter) {

NSString *pdfFileName = [self getPDFFileName];

// Create the PDF context using the default page size of 612 x 792.

UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);
CFRange currentRange = CFRangeMake(0, 0);
NSInteger currentPage = 0;
BOOL done = NO;
do {

UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);
currentPage++;
[self drawPageNumber:currentPage];
currentRange = [self renderPage:currentPage withTextRange:currentRange andFramesetter:framesetter];
if (currentRange.location == CFAttributedStringGetLength((CFAttributedStringRef)currentText))

done = YES;

} while (!done);
UIGraphicsEndPDFContext();
CFRelease(framesetter);
} else {

NSLog(@"Could not create the framesetter needed to lay out the atrributed string.");

}

// Release the attributed string.

CFRelease(currentText);

} else {

NSLog(@"Could not create the attributed string for the framesetter");

}
}
// Use Core Text to draw the text in a frame on the page.

- (CFRange)renderPage:(NSInteger)pageNum withTextRange:(CFRange)currentRange

andFramesetter:(CTFramesetterRef)framesetter

{

// Get the graphics context.

CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(currentContext, CGAffineTransformIdentity);
CGRect frameRect = CGRectMake(72, 72, 468, 648);
CGMutablePathRef framePath = CGPathCreateMutable();
CGPathAddRect(framePath, NULL, frameRect);
CTFrameRef frameRef = CTFramesetterCreateFrame(framesetter, currentRange, framePath, NULL);
CGPathRelease(framePath);
CGContextTranslateCTM(currentContext, 0, 792);
CGContextScaleCTM(currentContext, 1.0, -1.0);
CTFrameDraw(frameRef, currentContext);
currentRange = CTFrameGetVisibleStringRange(frameRef);
currentRange.location += currentRange.length;
currentRange.length = 0;
CFRelease(frameRef);
return currentRange;

}
- (void)drawPageNumber:(NSInteger)pageNum

{

NSString *pageString = [NSString stringWithFormat:@"Page %d", pageNum];
UIFont *theFont = [UIFont systemFontOfSize:12];
CGSize maxSize = CGSizeMake(612, 72);
CGSize pageStringSize = [pageString sizeWithFont:theFont constrainedToSize:maxSize lineBreakMode:UILineBreakModeClip];
CGRect stringRect = CGRectMake(((612.0 - pageStringSize.width) / 2.0),720.0 + ((72.0 - pageStringSize.height) / 2.0),pageStringSize.width,pageStringSize.height);
[pageString drawInRect:stringRect withFont:theFont];

}

关于objective-c - 在 Ipad 中直接从 UiTextView 创建多页 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15066231/

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