Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS writeToFile仅写入文件的一部分_Ios - Fatal编程技术网

IOS writeToFile仅写入文件的一部分

IOS writeToFile仅写入文件的一部分,ios,Ios,使用下面的代码,我成功地编写了pdf,但不是所有的文件!我可以看到文件有3页,但只有一页在写。有人知道为什么吗 (PresentationItem*)presentationItemFromDictionary:(NSDictionary*)dict{ 试试这个: 检查此代码。它将对所有页面进行迭代并将每个页面写入pdfContext。然后保存文件 if (dict == nil) return nil; NSString *tempName = [dict objectFor

使用下面的代码,我成功地编写了pdf,但不是所有的文件!我可以看到文件有3页,但只有一页在写。有人知道为什么吗

(PresentationItem*)presentationItemFromDictionary:(NSDictionary*)dict{


试试这个:

检查此代码。它将对所有页面进行迭代并将每个页面写入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;