gpt4 book ai didi

objective-c - Obj-C View to PDF 只呈现第一页

转载 作者:搜寻专家 更新时间:2023-10-30 20:06:36 25 4
gpt4 key购买 nike

我有一个名为 UIView+PDFView 的 UIView 扩展类,它采用当前 View ,将其拆分为页面,并呈现 PDF 文档。我的问题在于渲染部分;我可以成功地为内容“创建”页面,但是第一页之后的所有页面都是空白的。我的最终目标是采用当前 View ,“缩放”等于页面的宽度,并在 PDF 中对 View 的其余部分进行分页。

问题不在于:

  • 将 PDF 附加到电子邮件
  • 将 PDF 发送到打印机/打印模拟器
  • 在实际正确生成 PDF 时只打印一页
  • 正确调整 View 大小 (SO Question 4919388)
    • 我在发送到方法之前执行此操作。通过使框架高 10 像素进行验证,仍然打印一页(且仅一页)整页
  • 正确翻译 View 。通过翻译和比例进行验证;两者都正确地改变了 View ,但是都没有呈现在第一页之外。

我的代码如下:

@interface UIView (PDFView)
-(id)createPDFAndSaveToDocumentsWithFileName:(NSString*)aFilename andDocumentInfo:(NSDictionary *)documentInfo;
@end

@implementation UIView (PDFView)

-(id)createPDFAndSaveToDocumentsWithFileName:(NSString*)aFilename andDocumentInfo:(NSDictionary *)documentInfo {
// http://developer.apple.com/library/ios/DOCUMENTATION/GraphicsImaging/Reference/CGPDFContext/Reference/reference.html#//apple_ref/doc/constant_group/Auxiliary_Dictionary_Keys

// Creates a mutable data object for updating with binary data, like a byte array
NSMutableData *pdfData = [NSMutableData data];

// Points the pdf converter to the mutable data object and to the UIView to be converted
CGSize pageSize = CGSizeMake(self.bounds.size.width, 792);
UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, documentInfo);
CGContextRef pdfContext = UIGraphicsGetCurrentContext();

NSInteger currentPage = 0;
BOOL done = NO;

do {
CGRect currentPageRect = CGRectMake(0, (pageSize.height*currentPage), pageSize.width, pageSize.height);
UIGraphicsBeginPDFPageWithInfo(currentPageRect, nil);

// draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData
[self.layer renderInContext:pdfContext];

// If we're at the end of the view, exit the loop.
if ((pageSize.height*currentPage) > self.bounds.size.height) {
done = YES;
} else {
currentPage++;
}
} while (!done);

// remove PDF rendering context
UIGraphicsEndPDFContext();

if (aFilename == nil) {
return pdfData;
} else {
// Retrieves the document directories from the iOS device
NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];

// instructs the mutable data object to write its context to a file on disk
[pdfData writeToFile:documentDirectoryFilename atomically:YES];
NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
return nil;
}
}

最佳答案

我觉得你的问题出在

CGRect currentPageRect = CGRectMake(0, (pageSize.height*currentPage), pageSize.width, pageSize.height);

而不是尝试使用以下任一语句

UIGraphicsBeginPDFPageWithInfo(CGRectMake(0.0, 0.0, 612.0, 792.0), nil);
UIGraphicsBeginPDFPage();

每次您希望向上下文添加新页面时,使用上述语句,您就可以向上下文添加页面。

如果您想使用页面的默认大小,即 612 X 792,您可以直接使用 UIGraphicsBeginPDFPage();

对于自定义页面大小,您可以使用 UIGraphicsBeginPDFPageWithInfo(CGRectMake(0.0, 0.0, 612.0, 792.0), nil);

我认为这应该可以解决您的问题。

关于objective-c - Obj-C View to PDF 只呈现第一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10453733/

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