IOS writeToFile仅写入文件的一部分
使用下面的代码,我成功地编写了pdf,但不是所有的文件!我可以看到文件有3页,但只有一页在写。有人知道为什么吗 (PresentationItem*)presentationItemFromDictionary:(NSDictionary*)dict{IOS writeToFile仅写入文件的一部分,ios,Ios,使用下面的代码,我成功地编写了pdf,但不是所有的文件!我可以看到文件有3页,但只有一页在写。有人知道为什么吗 (PresentationItem*)presentationItemFromDictionary:(NSDictionary*)dict{ 试试这个: 检查此代码。它将对所有页面进行迭代并将每个页面写入pdfContext。然后保存文件 if (dict == nil) return nil; NSString *tempName = [dict objectFor
试试这个: 检查此代码。它将对所有页面进行迭代并将每个页面写入pdfContext。然后保存文件
if (dict == nil) return nil;
NSString *tempName = [dict objectForKey:@"name"];
CGPDFDocumentRef document = [self newPdfDocumentFromBase64DataString:[dict objectForKey:@"base64"]];
CGPDFPageRef page;
CFURLRef pdfURLOutput = (CFURLRef)[[NSURL alloc] initFileURLWithPath:YOUR_OUTPUT_FULL_FILE_PATH];
CGContextRef pdfContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL);;
CGRect pageRect;
for (int i=1; i<=CGPDFDocumentGetNumberOfPages(document); i++)
{
page = CGPDFDocumentGetPage(document, i);
pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
CGContextBeginPage(pdfContext, &pageRect);
CGContextDrawPDFPage(pdfContext, page);
CGContextEndPage(pdfContext);
}
CGContextRelease(pdfContext);
// Write to disk
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"%@/%@.pdf", docDir,tempName];
[(__bridge NSData *)mutableData writeToFile:fileName atomically:YES];
PresentationItem *item = [[PresentationItem alloc] init];
[item setTitle:[dict objectForKey:@"name"]];
[item setDocument:document];
CGPDFDocumentRelease(document);
CGDataConsumerRelease(dataConsumer);
CFRelease(mutableData);
return item;
if(dict==nil)返回nil;
NSString*tempName=[dict objectForKey:@“name”];
CGPDFDocumentRef document=[self-newPdfDocumentFromBase64DataString:[dict objectForKey:@“base64”];
CGPDFPageRef页面;
CFURLRef pdfURLOutput=(CFURLRef)[[NSURL alloc]initFileURLWithPath:您的_输出_完整_文件_路径];
CGContextRef pdfContext=CGPDFContextCreateWithURL(pdfURLOutput,NULL,NULL);;
CGRect pageRect;
对于(int i=1;我认为你是对的。因为如果我现在从1改为3,那么我会得到第3页。但是我们如何才能写出所有的页面。这是个问题。无论如何感谢你的帮助。@user2754113看到新的答案。这正是你想要的。我得到错误“变量”pdfContext“在这里使用CGContextBeginPage行时是初始化的(pdfContext,&pageRect);顺便说一句,我看不到mutableData是在哪里声明的?在清除代码后,我在同一行上得到另一个错误:“不兼容的指针类型将“CGRect”(又名“struct CGRect*)传递给”CFDictionaryRef(又名“const struct”\u CFDictionary*)类型的参数”@用户2754113,我用pdfContext
init更新了我的答案。试试并告诉我。
if (dict == nil) return nil;
NSString *tempName = [dict objectForKey:@"name"];
CGPDFDocumentRef document = [self newPdfDocumentFromBase64DataString:[dict objectForKey:@"base64"]];
CGPDFPageRef page;
CFURLRef pdfURLOutput = (CFURLRef)[[NSURL alloc] initFileURLWithPath:YOUR_OUTPUT_FULL_FILE_PATH];
CGContextRef pdfContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL);;
CGRect pageRect;
for (int i=1; i<=CGPDFDocumentGetNumberOfPages(document); i++)
{
page = CGPDFDocumentGetPage(document, i);
pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
CGContextBeginPage(pdfContext, &pageRect);
CGContextDrawPDFPage(pdfContext, page);
CGContextEndPage(pdfContext);
}
CGContextRelease(pdfContext);
// Write to disk
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"%@/%@.pdf", docDir,tempName];
[(__bridge NSData *)mutableData writeToFile:fileName atomically:YES];
PresentationItem *item = [[PresentationItem alloc] init];
[item setTitle:[dict objectForKey:@"name"]];
[item setDocument:document];
CGPDFDocumentRelease(document);
CGDataConsumerRelease(dataConsumer);
CFRelease(mutableData);
return item;