当前位置: 首页 > 知识库问答 >
问题:

iOS合并pdf文件

郦昆
2023-03-14

我正在尝试合并我的应用程序中的两个pdf文件。但我的应用程序在创建组合文件引用的时候不断出现故障。(参见代码中的注释)。有人能给我指一下这里的正确方向吗?谢了。

- (void) mergerPDFFiles : (NSString*) firstPDFFile : (NSString* ) secondPDFFile {

    //set path to plist to read in docs directory
    NSString* pdf1Path = [documentsDirectory stringByAppendingPathComponent:firstPDFFile];
    NSString* pdf2Path = [documentsDirectory stringByAppendingPathComponent:secondPDFFile];

    BOOL hasError = NO;
    NSMutableString* strErrMsg = [[NSMutableString alloc] init];

    //check to see if the file exists
    if (![fileManager fileExistsAtPath:pdf1Path]) {
        hasError = YES;
        [strErrMsg appendString:[NSString stringWithFormat:@"Could not find the PDF just created: %@", firstPDFFile]];
    }

    //check to see if the file exists
    if (![fileManager fileExistsAtPath:pdf2Path]) {
        hasError = YES;
        [strErrMsg appendString:[NSString stringWithFormat:@"Could not find the marketing materials PDF: %@", secondPDFFile]];
    }

    if (!hasError) {

        NSArray* arrPDFPaths = [[NSArray alloc] initWithObjects:pdf1Path, pdf2Path, nil];

        //make a new file name
        NSArray* arrPDF1Split = [firstPDFFile componentsSeparatedByString:@"."];
        NSString* strNewPDF = [NSString stringWithFormat:@"%@_Complete", [arrPDF1Split objectAtIndex:0]];

        // File paths
        NSString* pdfPathOutput = [documentsDirectory stringByAppendingPathComponent:strNewPDF];


/******************DIES HERE!***********************************/
        CFURLRef pdfURLOutput = (__bridge CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfPathOutput];
        NSInteger numberOfPages = 0;
        // Create the output context
        CGContextRef writeContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL);

/********************ERROR MESSAGE******************************
 CGDataConsumerCreateWithFilename: failed to open `ers/msg-surans/Library/Application Support/iPhone Simulator/6.0/Applications/299DBD9D-738F-49E0-B593-159033DDE39B/Documents/OER_Pro_Cost_Test_Complete' for writing: No such file or directory.
    ****************************************************************/



        //loop through the pdfs
        for(int i=0; i<arrPDFPaths.count; i++) {

            //get the file
            NSString* pdfSource = [arrPDFPaths objectAtIndex:i];

            //set a CFURL to the pdf
            CFURLRef pdfURL = (__bridge CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfSource];

            //set a reference to the pdf
            CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL);
            numberOfPages = CGPDFDocumentGetNumberOfPages(pdfRef);

            //set some ivars
            CGPDFPageRef page;
            CGRect mediaBox;

            // Read the first PDF and generate the output pages
            NSLog(@"GENERATING PAGES FROM PDF (%@)...", pdfSource);
            for (int x=1; x<=numberOfPages; x++) {
                page = CGPDFDocumentGetPage(pdfRef, x);
                mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
                CGContextBeginPage(writeContext, &mediaBox);
                CGContextDrawPDFPage(writeContext, page);
                CGContextEndPage(writeContext);
            }

            CGPDFDocumentRelease(pdfRef);
            CFRelease(pdfURL);

        }

        CFRelease(pdfURLOutput);

        // Finalize the output file
        CGPDFContextClose(writeContext);
        CGContextRelease(writeContext);

    } else {

        UIAlertView *alert = [[UIAlertView alloc]
          initWithTitle: @"Error Merging PDF Files"
          message: strErrMsg
          delegate: nil
          cancelButtonTitle:@"OK"
          otherButtonTitles:
        nil];
        [alert show];
    }

}

共有1个答案

须景辉
2023-03-14

我认为是您的 变量设置不正确。检查它是如何获得它的价值的。但是 看起来不太对。

应该是这样的:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; 
 类似资料:
  • 问题内容: 我的概念是-网站中有10个pdf文件。用户可以选择一些pdf文件,然后选择合并以创建一个包含所选页面的pdf文件。我该如何用PHP做到这一点? 问题答案: 我以前做过 我有一个用fpdf生成的pdf,我需要在其中添加可变数量的PDF。 因此,我已经设置了fpdf对象和页面),并使用fpdi导入了文件通过扩展PDF类来添加FDPI: 基本上,这会将每个pdf转换为图像以放入您的其他pdf

  • 我想合并几个pdf文件。我该怎么做? 到目前为止,我得到的是这个。 我正在尝试使用这个程序包myokyawhtun/PDFMerger。 根据我尝试合并的文件的不同,错误也会有所不同。 如果我尝试合并同一个pdf两次,则会生成该文件,但全部为空 如果我尝试上面的代码,就会得到HTTP错误500 如果我尝试使用更多文件,就会出现tcpdi_解析器内存不足错误 底线是它似乎不起作用。 我已经尝试了其他

  • 我想在另一个缩放的PDF页面中插入一个PDF页面。我想用iTextSharp做这个。 我有一个矢量绘图,可以导出为单页PDF文件。我想将此文件添加到其他PDF文档的页面中,就像我将图像添加到PDF文档一样。 这可能吗? 这样做的目的是在不损失质量的情况下保留放大的能力。 使用PDF矢量很难再现矢量绘图,因为它是一个极其复杂的绘图。 导出矢量绘图为高分辨率图像不是一个选项,因为我不得不在一个单独的P

  • Mac上的预览应用程序允许合并多个PDF文件,尽管功能相当模糊。我正在用Haskell编写一个实用程序,它需要执行类似的任务,即将任意数量的PDF文件合并到一个新文件中。 有没有人建议从哪里入手?显然,如果有一个关于Hackage的库可以开箱即用地完成大部分工作,那将是理想的,但如果没有,那么一些关于从哪里开始的指针将非常感激。

  • 我看了一个视频,学习如何将PDF文件合并成一个PDF文件。我试图修改一点代码,以便处理一个文件夹,其中有PDF文件主文件夹(Spyder)有,这是代码 我有一个名为的子文件夹进入主文件夹,在这个子文件夹中,我把PDF文件和子文件夹内的我创建了一个名为的文件夹。我得到了错误文件没有找到1.pdf虽然当打印的内循环,我得到了PDF名称。 错误的追溯

  • 在上一章中,我们已经了解了如何合并多个PDF文档。 在本章中,我们将了解如何从PDF文档的页面中提取图像。 从PDF文档生成图像 PDFBox库为您提供了一个名为PDFRenderer的类, PDFRenderer PDF文档呈现为AWT BufferedImage。 以下是从PDF文档生成图像的步骤。 第1步:加载现有PDF文档 使用PDDocument类的静态方法load()加载现有PDF文档