OStack程序员社区-中国程序员成长平台

标题: iphone - 将多个 pdf 文档合并为单个文档不起作用 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 19:37
标题: iphone - 将多个 pdf 文档合并为单个文档不起作用

我正在尝试将 11 个 pdf 文件合并为一个 pdf 文件。我正在使用以下代码,但在最终的 pdf 中仅显示第一个 pdf ...我在循环中记录了 pdfurls 和 CGPDFDocumentRef,它们是不是一直为零(在循环中)。可能是什么原因导致最终文档中只显示第一页

-(void)mergeDocuments
    {


        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
        NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder

        NSString *oldFile=[documentsDirectory stringByAppendingPathComponent"finalPdf.pdf"];
        NSMutableData *data=[[NSMutableData alloc] init];
         CGRect paperSize=CGRectMake(0,0,kDefaultPageWidth,kDefaultPageHeight);
        UIGraphicsBeginPDFContextToData(data, paperSize, nil);

        for (int pageNumber = 1; pageNumber <= 11; pageNumber++)
        {

            NSString *pdfPath = [[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat"page_%d.pdf",pageNumber]] retain];



            NSURL *pdfUrl = [[NSURL fileURLWithPath:pdfPath] retain];



            UIGraphicsBeginPDFPageWithInfo(paperSize, nil);


            CGContextRef currentContext = UIGraphicsGetCurrentContext();


            CGContextTranslateCTM(currentContext, 0, paperSize.size.height);
            CGContextScaleCTM(currentContext, 1.0, -1.0); 



            CGPDFDocumentRef newDocument = CGPDFDocumentCreateWithURL ((CFURLRef) pdfUrl);

            CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, pageNumber);


            CGContextDrawPDFPage (currentContext, newPage);
            newPage = nil;       
            CGPDFDocumentRelease(newDocument);
            newDocument = nil;
            [pdfUrl release];

        }

        NSURL *finalUrl=[NSURL URLWithStringldFile];



        UIGraphicsEndPDFContext(); 
[data writeToURL:finalUrl atomically:YES];
    }



Best Answer-推荐答案


看起来您的代码假定每个文档中只有一页,但是它在打开每个文件时要求页面 pageNumber,因此要求 page_1 中的第 1 页.pdf、page_2.pdf 中的第 2 页、page_3.pdf 中的第 3 页等...

如果您只想从每个文档的第一页更改此:

CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, pageNumber);

对此:

CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, 1);

为了它的值(value),在我发现这个之前,我根据我已经拥有的一个例程重新编写了你的​​例程(请原谅我,但它是在一个 ARC 项目中,所以你必须重新进行内存管理)如下:

(注意:已删除错误检查以使代码更具可读性!)

-(void)mergeDocuments {
    NSArray     *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString    *documentsDirectory = [paths objectAtIndex:0];

    NSString    *oldFilePath=[documentsDirectory stringByAppendingPathComponent"finalPdf.pdf"];
    NSURL       *oldFileUrl = [NSURL fileURLWithPathldFilePath];

    CGContextRef context = CGPDFContextCreateWithURL((__bridge_retained CFURLRef)oldFileUrl, NULL, NULL);

    for (int docNumber = 1; docNumber <= 11; docNumber++)
    {
        // Get the first page from each source document
        NSString            *pdfPath        = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat"page_%d.pdf",docNumber]];
        NSURL               *pdfUrl         = [NSURL fileURLWithPath:pdfPath];
        CGPDFDocumentRef    pdfDoc          = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfUrl);
        CGPDFPageRef        pdfPage         = CGPDFDocumentGetPage(pdfDoc, 1);
        CGRect              pdfCropBoxRect  = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);

        // Copy the page to the new document
        CGContextBeginPage(context, &pdfCropBoxRect);
        CGContextDrawPDFPage(context, pdfPage);

        // Close the source files
        CGContextEndPage(context);
        CGPDFDocumentRelease(pdfDoc);         
    }

    // Cleanup
    CGContextRelease(context);
}

关于iphone - 将多个 pdf 文档合并为单个文档不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9668047/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4